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]);
}
登高而望。

浙公网安备 33010602011771号