PTA 7-32 说反话-加强版

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

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

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

输入样例:
Hello World Here I Come



输出样例:
Come I Here World Hello

代码如下:

#include<stdio.h>
#include<string.h>
main()
{
	char data[500001];
	gets(data);
	int len=strlen(data)-1,i,temp=0,word,flag=0;
	for(i=len;i>=0;i--)
	{
		if(data[i]!=' ')
		{
			flag=1;
			temp++;
	  }
		if(data[i]==' '&&flag||i==0&&flag)
		{
			flag=0;
			if(data[0]!=' ')
			{
				int word_len=i>0?i+temp:i+temp-1;
				for(word=i>0?i+1:i;word<=word_len;word++)
				printf("%c",data[word]);
				if(i!=0)printf(" ");
			}
			else
			{
				for(word=i+1;word<=i+temp;word++)
				printf("%c",data[word]);
				if(i!=0)
				{
					int k=i;
					while(data[k--]==' '&&k>=0);
					if(k!=-1)printf(" ");
				}
			}
			temp=0;
		}
	}
}

  未AC代码(个人认为思路很好):

#include<stdio.h>
#include<string.h>
main()
{
	char data[5000][11],x;
	memset(data,'\0',sizeof(data));
	int i=0,j=0,flag=0;
	scanf("%c",&x);
	while(x!='\n')
	{
		if(x!=' ')
		{
			data[i][j++]=x;
			flag=1;
		}
		else if(x==' '&&flag)
		{
			data[i][j]='\0';
			j=0;i++;flag=0;
		}
		scanf("%c",&x);
	}
	int c;
	for(c=i;c>0;c--)
	if(strlen(data[c])!=0)printf("%s ",data[c]);
	printf("%s",data[0]);
}

  

posted @ 2020-03-13 18:38  X-Yunner  阅读(419)  评论(0)    收藏  举报