码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 工程师养成 每日一题fourth (reverse的使用)

时间:2019-11-11 00:38:02      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:开头   lin   符号   else   自定义   养成   char   str   mes   

题目:

将一句话的单词进行倒置,标点不倒置。

技术图片

 

 这道题最简单的解法是使用algorithm提供的reverse()函数

具体步骤我写在代码注释里面:

 1 #include <string>
 2 #include <algorithm>
 3 int main(){
 4     string s;
 5     getline(cin, s);      //输入的字符串中包含空格,所以不能使用cin输入(遇到空格会停止),使用getline读取全部的字符(遇到换行符、EOF、自定义符号停止)
 6     auto it = s.begin();  //本体我选择用迭代器进行遍历字符串
 7     reverse(s.begin(), s.end());    //第一步先将整个字符串逆置,之后再分别将每一个单词逆置
 8     while (it!=s.end()){
 9         auto ii = it;
10         while (ii != s.end() && *ii !=  ){    //找到一个单词的结束位置
11             ii++;
12         }
13         reverse(it, ii);                    //逆置当前单词
14         if (ii != s.end()){          
15             it = ii + 1;               //重新定义下一个单词的开头位置,+1是因为单词之间只有一个‘ ’
16             ii++;
17         }
18         else{                         //若当前是最后一个位置,则直接给予结束条件结束循环
19             it = s.end();
20         }
21     }
22     cout << s;        //输出结果
23     return 0;
24 }

此次最主要的点就是熟悉reverse()的使用

但是单单就这一道题来说还有更优解法,也是我在写完之后才发现其他大佬写的,这里分享出来给大家:

 1 #include<iostream>
 2 using namespace std;
 3 #include<string>
 4 int main()
 5 {
 6     string s1;
 7     string s2;
 8 
 9     cin >> s1;
10 
11     while (cin >> s2&&getchar() != \n)
12     {
13         s1 = s2 + " " + s1;
14     }
15 
16     cout << s2 << " " << s1 << endl;
17     return 0;
18 }

看完表示我确实是菜。。。。

C++ 工程师养成 每日一题fourth (reverse的使用)

标签:开头   lin   符号   else   自定义   养成   char   str   mes   

原文地址:https://www.cnblogs.com/Kaniso-Vok/p/11832459.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!