标签:开头 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