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

这道题最简单的解法是使用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 }
看完表示我确实是菜。。。。