B1009说反话

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:

测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。

输出格式:

每个测试用例的输出占一行,输出倒序后的句子。

输入样例:

Hello World Here I Come
 

输出样例:

Come I Here World Hello

思路:

利用reverse()进行反转,然后遍历字符串str,遇到空格之后再次进行反转,使用pos记录开始的位置;最后一个单词由于没有空格所以单独处理。

 问题:

输入字符串不完整

解决:

cin>>str; 改为 getline(cin,str);前者遇到空格结束输入,后者遇到回车结输入。

 

 1 #include <iostream>
 2 #include <string>
 3 #include <algorithm>
 4 using namespace std;
 5 int main() {
 6     string str;
 7     getline(cin, str);//在输入回车时结束
 8     reverse(str.begin(),str.end());//对容器或者string类型进行反转
 9     int pos = 0;
10     for (int i = 0; i < str.length(); i++) {
11         if (str[i] == ' ') {
12             reverse(str.begin() + pos, str.begin() + i);
13             pos = i + 1;
14         }    
15     }
16     //对最后一个单词单独处理
17     reverse(str.begin() + pos, str.end());
18     cout << str;
19 }

 

 

 

posted @ 2020-02-11 18:06  PennyXia  阅读(114)  评论(0编辑  收藏  举报