说反话-加强版 (20 分)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41591279/article/details/88604542

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

输入格式:

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

输出格式:

每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例:

Hello World   Here I Come

输出样例:

Come I Here World Hello
#include<iostream>
#include<cstring>
#include<list>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
	list<char> list1 ;
	list<char>list2 ;
	string str;
	while(getline(cin,str))
	{
		int n = str.size() ;
		int flag = 0 ;
		if(str[0]==' ')
			flag = 1 ;
		for(int i=0;i<n;i++)//去除连续的空格,只留一个 
		{
			if(str[i]==' '&&flag==1)
				continue ;
			else if(str[i]==' '&&flag==0)
			{
				list1.push_back(str[i]) ;
				flag = 1 ;
			}
			else
			{
				list1.push_back(str[i]) ;
				flag = 0 ;
			}
		}	
		while(list1.back()==' ')//出去末尾多余的空格 
		{
			list1.pop_back() ;
		}
		while(!list1.empty())
		{
			char c = list1.back() ;
			//printf("%c",c) ;
			list1.pop_back() ;
			if(c!=' ')
				list2.push_back(c) ;
			else
			{
				list<char>::iterator it=list2.begin();
				list2.reverse() ;
				for(it=list2.begin();it!=list2.end();it++)
					printf("%c",*it) ;
				printf(" ") ;
				list2.clear() ;
			}
					
		}
		list2.reverse() ;
		list<char>::iterator it=list2.begin();
		for(it=list2.begin();it!=list2.end();it++)
			printf("%c",*it) ;
		printf("\n") ;
		list2.clear() ;
	}
			
	return 0 ;
}

对比:https://blog.csdn.net/qq_41591279/article/details/88604473

猜你喜欢

转载自blog.csdn.net/qq_41591279/article/details/88604542