• 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循环遍历反转后的单词,并输出,注意:最后一个单词后面不输出空格,其余每两个单词之间都要输出空格。

    1. #include <iostream>
    2. #include <algorithm>//包含reverse函数的定义
    3. #include <sstream>
    4. #include <vector>
    5. #include <string>
    6. using namespace std;
    7. int main()
    8. {
    9. string sentence;//定义一个字符串变量sentence,用于存放输入的句子
    10. getline(cin, sentence);//getline函数读取整行输入
    11. vector<string>words;//定义一个字符串变量,存放分割后的单词
    12. stringstream ss(sentence);//创建一个字符串流对象ss,并初始化它为输入的字符串
    13. string word;//存放从字符串流中读取的单词
    14. while (ss >> word) {//循环从字符串流中读取单词,直到读取完毕
    15. words.push_back(word);//将读取到的的单词添加到向量words后面
    16. }
    17. //使用reverse 函数反转向量words中单词的顺序
    18. reverse(words.begin(), words.end());
    19. //遍历反转后的单词向量,并输出,单词之间要用空格隔开
    20. for (size_t i = 0; i < words.size(); i++) {
    21. cout << words[i];
    22. if (i < words.size() - 1) {
    23. cout << " ";
    24. }
    25. }
    26. cout << endl;
    27. return 0;
    28. }

    对以上的代码补充知识点如下:

    words.push_back(word);

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

  • 相关阅读:
    新版收款码三合一在线生成系统源码
    C++Day6
    零基础学python之列表
    DBeaver 导出数据的问题 SQL 错误: jdbc 驱动内部错误 Java heap space
    HarmonyOS开发:动态共享包的依赖问题
    C语言校园家教管理系统
    [搞点好玩的] JETSONNANO 受苦记 -- 001 (布置环境,未完待续)
    动态主机配置协议(DHCP)解密:网络自动化与管理的关键
    [更准确的倒计时功能]vue中使用web worker 实现倒计时
    flutter下拉列表
  • 原文地址:https://blog.csdn.net/2301_80161204/article/details/137887859