倒置字符串
题目来源
牛客网:倒置字符串
题目描述
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
输入描述
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100
输出描述
依次输出倒置之后的字符串,以空格分割
示例1
输入
I like beijing.
输出
beijing. like I
思路分析
- 先将一句话整体逆置,再逐个单词逆置
- 外层循环表示整个字符串,内层循环用于逆置每一个空格隔开的区间,即一个单词
- 内层循环条件为当前迭代器不指向空格,且不是字符串末尾
- 因为逆置要使用reverse函数,所以采用迭代器对字符串进行遍历
代码展示
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
string s;
getline(cin,s);
reverse(s.begin(),s.end());
auto start=s.begin();
while(start!=s.end())
{
auto end=start;
//注意空格是一个字符,要用' '单引号
while(*end!=' '&&end!=s.end())
{
end++;
}
//两种情况都要进行reverse,所以把reverse写在最前面
reverse(start,end);
//此处如果判断条件不能写成if(*end=' '),
//因为end到字符串末尾时值为NULL,解引用会造成段错误
if(end!=s.end())
{
start=end+1;
}
else
{
start=s.end();
}
}
cout<<s;
return 0;
}