给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
首先在这里梳理一下思路:
1.包含了5个必要的库
2.在main函数中,先输入句子,再使用getline函数读取整个句子,包括空格
3.然后程序通过创建stringstream 对象ss ,并且初始化为和刚才输入的句子一样的字符串,这个程序允许程序像处理文件流一样处理字符串,并通过操作符>>逐个读取ss中的单词
4.通过while循环逐个读取ss中的单词,并添加到到words向量中
5.用reverse函数反转words中的单词顺序
6.最后,用for循环遍历反转后的单词,并输出,注意:最后一个单词后面不输出空格,其余每两个单词之间都要输出空格。
- #include <iostream>
- #include <algorithm>//包含reverse函数的定义
- #include <sstream>
- #include <vector>
- #include <string>
- using namespace std;
- int main()
- {
- string sentence;//定义一个字符串变量sentence,用于存放输入的句子
- getline(cin, sentence);//getline函数读取整行输入
-
- vector<string>words;//定义一个字符串变量,存放分割后的单词
- stringstream ss(sentence);//创建一个字符串流对象ss,并初始化它为输入的字符串
- string word;//存放从字符串流中读取的单词
- while (ss >> word) {//循环从字符串流中读取单词,直到读取完毕
- words.push_back(word);//将读取到的的单词添加到向量words后面
- }
- //使用reverse 函数反转向量words中单词的顺序
- reverse(words.begin(), words.end());
-
- //遍历反转后的单词向量,并输出,单词之间要用空格隔开
- for (size_t i = 0; i < words.size(); i++) {
- cout << words[i];
- if (i < words.size() - 1) {
- cout << " ";
- }
- }
- cout << endl;
-
-
- return 0;
- }
对以上的代码补充知识点如下:
words.push_back(word);
push_back
是std::vector
类模板的一个成员函数,用于在向量(vector)的末尾添加一个元素。在这个例子中,
words
是一个字符串向量(std::vector
),它存储了从输入句子中分割出来的单词。每次循环时,从stringstream
对象ss
中读取一个单词(存储在word
中),然后push_back
将这个单词添加到words
向量的末尾。
reverse(words.begin(), words.end());
reverse
是一个算法函数,定义在头文件中,用于反转一个序列中的元素顺序。
这里,
words.begin()
和words.end()
分别返回指向words
向量起始和末尾的迭代器。reverse
函数使用这两个迭代器来指定需要反转的元素范围,即整个words
向量。调用reverse
后,words
向量中的单词顺序将被反转。
size_t i = 0;
size_t
是一个无符号整数类型,常用于表示对象的大小。在C++的标准库中,size_t
通常用于表示容器(如向量、数组等)的大小或索引。这里,
i
被初始化为0
,用作后续for
循环的索引变量,用于遍历words
向量中的单词。
i < words.size();
words.size()
返回words
向量中元素的数量(即单词的数量)。在
for
循环中,i < words.size()
作为循环条件,确保循环不会超出向量的范围。只要i
小于words.size()
,循环就会继续执行。
i < words.size() - 1
这个条件用于判断当前索引
i
是否指向words
向量的最后一个元素之前的位置。如果是,则执行后面的代码块(通常是在单词之间添加空格)。这样做的原因是,当
i
等于words.size() - 1
时,即最后一个单词时,我们不需要在单词后面添加空格,因为最后一个单词后面通常是一个换行符或其他句子结束标记。