PAT Basic1009 说反话

版权声明:个人学习笔记记录 https://blog.csdn.net/Ratina/article/details/84402313

链接:PAT Basic1009

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

输入格式:

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

输出格式:

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

输入样例:

Hello World Here I Come

输出样例:

Come I Here World Hello


因为不知道有几个单词,所以要先读取一行再进行处理。
看到很多人都是通过判断一行中的空格符来分割单词,以最后的换行符作为结尾。
我这里就用stringstream吧,这个其实在这里挺好用的,就是先用 getline (cin , line) 读入一行,然后把line放到一个stringstream中,再用cin从中读取一个个单词。

补充一下,后来发现并不一定要先读取一行,因为输入是标准的,所以可以直接依次读取单词,同时用ch=getchar()来读取每个单词的后一个字符,如果ch是空格符就继续,是换行符就停止


以下代码:

#include<iostream>
#include<sstream>   //这个头文件别忘了
#include<string>
using namespace std;
int main()
{
	string s;
	while(getline(cin,s))
	{
		stringstream ss(s);
		string str[80];
		int cnt=0;
		while(ss>>str[cnt])
			cnt++;
		for(int i=cnt-1;i>=0;i--)
		{
			if(i!=cnt-1)    //注意最后不能有多余空格
				cout<<" ";
			cout<<str[i];
		}
		cout<<endl;
	}
}

此外,说到getline函数,最近看到了cin和getline()混用时的一个注意点

getline()读取规则是遇到‘\n’结束读取,会读入‘\n’然后将其替换为‘\0’

而cin在读取时是会跳过空格、制表符和换行符的,所以如果用cin读取完了上一行,接下来的第一个getline()是读取不了任何东西的,因为上一行还有一个‘\n’被留在缓冲区中。
详见:https://blog.csdn.net/u011421608/article/details/44591579

猜你喜欢

转载自blog.csdn.net/Ratina/article/details/84402313