PAT 乙级 1009
Posted moujun1001
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT 乙级 1009相关的知识,希望对你有一定的参考价值。
一、题目
说反话
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。
输出格式:每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
二、题解
本题本身属于比较简单的字符串操作题,但是因为对于string的操作和函数不熟悉导致本题做起来很费劲,需要加强对于string类以及相关方法的理解和熟练程度。
1. string读取字符串时,默认以空格或者回车作为结束输入的标志,所以在本题中,如果用string的普通输入无法完整读入数据,因此需要使用getline方法
getline()
头文件:#include <string>
函数原型:getline(istream &is,string &str,char delim)
主要功能:读入整行数据,不把空格作为判断输入结束的条件,默认是回车,可以自行设置结束条件
istream &is表示一个输入流,譬如cin,string表示把从输入流读入的字符串存放在这个字符串中(&str其实就是一个变量),char delim是终止符(默认为回车,还可以是别的符号,如#,*之类的都可以)
2. 如果需要对某一个字符串进行切片处理时,本题中用到的方法是substr()
substr()
头文件:#include <string>
函数原型:substr(size_t pos = 0, size_t len = npos)
主要功能:复制某一范围内的子字符串,要求从指定位置开始,并具有指定的长度
三、代码
1 #include <iostream>
2 #include <string>
3 #include <vector>
4 using namespace std;
5
6 int main() {
7 string str;
8 vector<string> out_str;
9 getline(cin, str);
10 str[str.size()] = ‘ ‘;
11 int start = 0, cnt = 0;
12 string tmp;
13 for (int i = 0; i < (str.size() + 1); i++) {
14 if (str[i] == ‘ ‘) {
15 tmp = str.substr(start, cnt);
16 out_str.push_back(tmp);
17 start = i + 1;
18 cnt = -1;
19 }
20 cnt++;
21 }
22 for (int i = out_str.size() - 1; i >= 0; i--) {
23 cout << out_str[i];
24 if (i != 0)
25 cout << ‘ ‘;
26 }
27
28 return 0;
29 }
以上是关于PAT 乙级 1009的主要内容,如果未能解决你的问题,请参考以下文章