【PAT】B1009. 说反话(C++接受带有空格的字符串)
@(PAT)
链接:https://www.patest.cn/contests/pat-b-practise/1009
很简单的一道题,用string和vector能够轻松AC,有一个小小的trick:原输入最后是没有空格的,为了处理最后一个单词,所以人工在输入后面加入一个空格。为什么要记录下来呢,因为自己对C++接受带有空格字符串的方法不太熟悉,这里顺便复习复习。
AC code:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
string s;
getline(cin, s);
int size= s.length();
vector<string> words;
string temp= "";
for (int i= 0; i< size; i++) {
if (s[i]== ' ') {
words.push_back(temp);
temp= "";
} else {
temp+= s[i];
}
}
for (int i= words.size()- 1; i>= 0; i--) {
if (i== 0) {
cout<< words[i];
} else {
cout<< words[i]<< " ";
}
}
}
那么C++中,输入带有空格的字符串有哪些方法呢,参考Blog:
http://blog.csdn.net/achangett/article/details/70276655
下面是C++中主要用到的输入方法:
1. cin
空格和回车作为结束符,只能接受空格前的字符。
2. gets(char* )
接受的是char*类型,回车作为结束符,能够接受空格。
int main() {
char s[100];
gets(s);
cout<< s;
}
3. getline(cin, string)
接受的是string类型,结合string会很方便,上题就是用这个解的,回车作为结束符,能够接受空格。
int main() {
string s;
getline(cin,s);
cout<< s;
}
4. cin.get(or getline)(char*, int(length), char(end))
接受的是char*类型和接受的长度,可选输入为结束标识,默认空格为结束符。能够接受空格,并且可以指定结束符号。
int main() {
char s[55];
// cin.get(s, 50, 'a');
cin.getline(s, 50, 'a');
cout<< s;
}
上面代码指定结束符号为’a’。
输入:tttttt m ff s fa
输出:tttttt m ff s f
总结
需要输入包含空格的string的话,用string最好用getline,很好用。用char*的话一般用gets,cin.get和cin.getline可以指定结束符号,必须要输入长度。