题目
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
思路
本来想通过string
获取字符串后,通过函数按照每个空格之间分割,但是操作有点麻烦。去了解了一点输入流的操作,用着还挺好使,iss
作为输入流在while
循环内持续输入至str
,每隔空格就会停止输入,这样就可以完美分割且易于存储和后面的倒叙输出。
代码
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main()
{
//定义并输入字符串
string s;
getline(cin, s);
istringstream iss(s);
/*
分割字符串
i、words用来储存分解下来的字符串
str用于获取每一次iss串流出入的字符串,即被空格分割时暂停获取的字符串
*/
int i = 0;
string str;
string words[80];
while (iss >> str)
{
words[i] = str;
++i;
}
//倒叙输出字符串
while (i)
{
--i;
cout << words[i];
if (i != 0)
{
cout << " ";
}
}
return 0;
}
记录
1.cin>>s
遇到空格会自动结束读取,可以使用getline(cin,s)
。使用三个参数getline(cin,s,ch)
则代表读取到定义的ch
字符时停止。
2.istringstream
执行C++风格串流输入,添加<sstream>
,就可以使用如本例进行串流输入。同时它的输入并不是读取之后,本身数据就转移了,只是顺序输入。同时一个istringtream
的读取是单向单次不会回头,例
iss >> str;
cout << str << endl;
iss >> str1;
cout << str1 << endl;
iss >> str2;
cout << str2 << endl;
循环并不会影响,且不同输入对象也不会影响其从头再来。其本身内容输入完毕之后后续就不会再输入,如iss
只有LOVE YOU时,则str2
不会被输入任何内容,结果只有
LOVE
YOU
。
3.数组下标i
还需要多加注意,经常出错。