pat 1009 说反话

2024-04-18 10:12
文章标签 pat 1009 反话

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

这篇关于pat 1009 说反话的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/914490

相关文章

PAT甲级-1044 Shopping in Mars

题目   题目大意 一串项链上有n个钻石,输入给出每个钻石的价格。用m元买一个连续的项链子串(子串长度可为1),如果不能恰好花掉m元,就要找到最小的大于m的子串,如果有重复就输出多个,按递增顺序输出子串的前端和后端索引。 原来的思路 取连续的子串使和恰等于m,没有恰等于就找最小的大于。可以将子串依次累加,使得每个位置都是起始位置到该位置的序列和,整个数组显递增顺序,就可以用右边减左边

PAT (Advanced Level) Practice——1011,1012

1011:  链接: 1011 World Cup Betting - PAT (Advanced Level) Practice (pintia.cn) 题意及解题思路: 简单来说就是给你3行数字,每一行都是按照W,T,L的顺序给出相应的赔率。我们需要找到每一行的W,T,L当中最大的一个数,累乘的结果再乘以0.65,按照例子写出表达式即可。 同时还需要记录每一次选择的是W,T还是L

2015 Multi-University Training Contest 5 1009 MZL#39;s Border

MZL's Border  Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=5351   Mean:  给出一个类似斐波那契数列的字符串序列,要你求给出的f[n]字符串中截取前m位的字符串s中s[1...i] = s[s.size()-i+1....s.size()]的最大长度。 analyse:   过计算

PAT (Advanced Level) Practice

1001:  题目大意: 计算 a+b 的结果,并以标准格式输出——即每三个数字一组,组之间用逗号分隔(如果数字少于四位,则不需要逗号分隔)  解析: 我们知道相加右正有负,对于样例来说 Sample Input: -1000000 9 Sample Output: -999,991 如果是从左往右,算上负号的话输出应该是-99,999,1 从右往左:-,999,991离正确

HDU 1009(贪心)

题意:老鼠一共有m斤猫食,xxx一共有n个仓库。每个仓库有a b两种数据,a表示当前仓库一共有多少斤鼠食,b表示当前仓库要换a斤鼠食要多少猫食。求老鼠最多能换多少食物。 第一组数据是m n,接下来一共有n组数据,每组是对应仓库的a b。     #include <iostream>#include <cstring>#include <cstdio>#include <algori

1050 String Subtraction——PAT甲级

Given two strings S1​ and S2​, S=S1​−S2​ is defined to be the remaining string after taking all the characters in S2​ from S1​. Your task is simply to calculate S1​−S2​ for any given strings. However,

NYOJ--1009 So Easy[Ⅰ]

So Easy[Ⅰ] 时间限制: 1000 ms  |  内存限制: 65535 KB 难度:2 描述 给出任意一个三角形的三个边a,b,c。 要求:求出这个三角形的外接圆半径。 输入 输入数据有多组。 每行有三个数a,b,c(0<a,b,c<100) 输出 输出一行单独的一个数表示三角形的的外接圆半径,输出保留两位小数。(不要输出多余的信息) 样例输入 3 4 5

Ural 1009 K-based Numbers(DP)

题目地址:Ural 1009 DP水题。。二维DP,第一维只用0和1来表示0和非零就可以。 代码如下: #include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <q

1105 链表合并——PAT乙级

给定两个单链表 L1​=a1​→a2​→⋯→an−1​→an​ 和 L2​=b1​→b2​→⋯→bm−1​→bm​。如果 n≥2m,你的任务是将比较短的那个链表逆序,然后将之并入比较长的那个链表,得到一个形如 a1​→a2​→bm​→a3​→a4​→bm−1​⋯ 的结果。例如给定两个链表分别为 6→7 和 1→2→3→4→5,你应该输出 1→2→7→3→4→6→5。 输入格式: 输入首先在第一

1110 区块反转——PAT乙级

给定一个单链表 L,我们将每 K 个结点看成一个区块(链表最后若不足 K 个结点,也看成一个区块),请编写程序将 L 中所有区块的链接反转。例如:给定 L 为 1→2→3→4→5→6→7→8,K 为 3,则输出应该为 7→8→4→5→6→1→2→3。 输入格式: 每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数正整数 N (≤105)、以及正整数 K (