pat 1009 说反话

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

输入格式:

测试输入包含一个测试用例,在一行内给出总长度不超过 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_backstd::vector 类模板的一个成员函数,用于在向量(vector)的末尾添加一个元素。

在这个例子中,words 是一个字符串向量(std::vector<string>),它存储了从输入句子中分割出来的单词。每次循环时,从 stringstream 对象 ss 中读取一个单词(存储在 word 中),然后 push_back 将这个单词添加到 words 向量的末尾。

reverse(words.begin(), words.end());

reverse 是一个算法函数,定义在 <algorithm> 头文件中,用于反转一个序列中的元素顺序。

这里,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 时,即最后一个单词时,我们不需要在单词后面添加空格,因为最后一个单词后面通常是一个换行符或其他句子结束标记。

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值