例题描述
将一句话的单词进行倒置,标点不倒置。比如I like beijing.
经过函数后变为:beijing. like I
- 输入描述:
每个测试输入包含1
个测试用例:I like beijing.
输入用例长度不超过100
- 输出描述:
依次输出倒置之后的字符串,以空格分割
示例1:
- 输入
I like beijing.
- 输出
beijing. like I
解题思路
先将字符串整体逆置,遍历字符串,找出每个单词,再对单词局部逆置。
这里使用了stl
算法中的reverse
,所以这里使用迭代器遍历string
。
代码一
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
string s;
getline(cin, s);
//1. 整体反转逻辑
reverse(s.begin(), s.end());
//2. 单词反转逻辑
auto start = s.begin();
while (start != s.end()){
auto end = start;
while (end != s.end() && *end != ' ')
end++;
reverse(start, end);
if (end != s.end()){
start = end + 1;
}
else{
start = end;
}
}
cout << s << endl;
return 0;
}
代码二
第二思路是一个比较讨巧的思路,直接利用cin>>s
接收输入,遇到空格就结束,自然就分割开了每个单
词,其次将每次接收到的单词拼接到之前串的前面就逆置过来了。
#include <iostream>
#include <string>
using namespace std;
// cin读取string时自动会被空格分隔开,用另一个字符串存储进行逆序输出
int main(){
string s1, s2;
cin >> s2;
while (cin >> s1)
s2 = s1 + " " + s2;
cout << s2 << endl;
return 0;
}