日常刷题14

题目:给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
思路:一边输出一边判断。具体思路在代码中。
代码:

#include
#define N 500000
int main()
{
	char c,ch[N];
	int i=0,j,blank=0,flag=0,cnt=0;
	while((c=getchar())!='\n')//输入回车结束输入
	{
		if(c!=' ')/*以空格来标识一个单词输入结束,
		flag表示现在正在输入单词*/
		{
			ch[i++]=c;
			flag=1;
			blank=0;
		}
		else if(blank>0)/*输入多个空格时,只接收一个,
		首空格不接收*/
			continue;
		else if(flag)	
		{
			ch[i++]=c;
			blank++;
		}		
	}
	for(--i;i>=0;i--)//字符串以'\0'结束,这个不算在内
	{
		if(ch[i]!=' ')
			cnt++;//判断单词中字母的个数
		else if(ch[i]==' '&&cnt>0)//处理尾空格
		{
			for(j=i+1;j<=i+cnt;j++)
				printf("%c",ch[j]);
			printf(" ");
			cnt=0;
		}
	}
	/*以上没有输出最后一个单词(要是有多个的话)和
	只有一个单词的情况下的单词,在这里输出*/
	for(j=i+1;j<=i+cnt;j++)
		printf("%c",ch[j]);
	return 0;
}

这道题是在参考了别的大佬写的之后才写出来的。我一开始想用二维数组表示这一串英文,反转输出就是一行一行输出,但是结果总是有些问题。

你可能感兴趣的:(c语言)