PAT乙1009.说反话

题目

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

输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。

输出格式:每个测试用例的输出占一行,输出倒序后的句子。

输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello

思路

题目很简单,通过率很高,直接贴出代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;

int main(){
string s;
getline(cin, s);
vector<string> v;
int flag = 0;
for(int i=0; i<s.length(); i++){
string temp = "";
while(s[i] != ' ' && i!=s.length()-1){
temp += s[i];
i++;
}
if(i == s.length()-1){
temp += s[i];
}
v.push_back(temp);
}
for(int i=v.size()-1; i>=0; i--){
// printf("%s%s", v[i], (i?" ":"\n"));
if(i == v.size()-1)
cout << v[i];
else
cout << " " << v[i];
}
cout << endl;
}

其实这里,我想要记录的一点,就是我注释掉了的那块地方。我以为printf可以将string输出,但是这个地方总是报错。经过查询,发现printf只能输出C语言内置的数据类型,而string不是内置的,只是一个扩展的类,因此这样是错误的。

如果要一定要用printf输出string,可以这样:

1
2
string aa = "qq";
printf("%s", aa.c_str());

但是这样做似乎并不被推荐,因此要么用char数组,要么用cout。最后,贴一下有关printf的详细介绍的博客地址:http://blog.csdn.net/k346k346/article/details/52252626