给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。
输出格式:每个测试用例的输出占一行,输出倒序后的句子。
输入样例:Hello World Here I Come输出样例:
Come I Here World Hello
解题思路:
同上一道题目,两步反转法,先对整个字符串进行反转,然后对每个单词进行反转即可。充分利用STL库,将代码写的简洁易懂!
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string a;
getline(cin, a);
reverse(a.begin(), a.end());//对整个字符串进行反转
string::iterator wordBegin = a.begin();//指向每个单词的头部
string::iterator wordEnd;//指向每个单词的尾部+1,实现前闭后开的区间,与STL保持一致
string::iterator it;//遍历整个字符串的指针
//除尾部单词外,其余每个单词反转
for (it = a.begin(); it != a.end(); it++)
{
if (*it == ' ')
{
wordEnd = it;//调整wordEnd指针指向当前单词的尾部
reverse(wordBegin, wordEnd);
wordBegin = it + 1;//调整wordBegin指针指向下一个单词的首部
}
}
//此时it指向a.end(),将尾部单词也反转
wordEnd = it;
reverse(wordBegin, wordEnd);
cout << a;
return 0;
}