题目描述:
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入描述:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出描述:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
代码
#include<stdio.h>
#include<string.h>
void reverse(char *s,int sta,int end)
{
char t;
for(int i=sta,j=end;i<j;i++,j--)
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
int main()
{
char t[500005]="";
while(gets(t)!=NULL){
char s[500005]="";
int len=strlen(t);
int i=0;
while(t[i]==' ') i++;
for(int j=0;i<=len;)
s[j++]=t[i++];
len=strlen(s);
//整体翻转
reverse(s,0,len-1);
//便于判断最后一个单词
s[len]=' ';
s[len+1]='\0';
len++;
for(int i=0;i<len;)
{
if(s[i]!=' ')
{
for(int j=i;j<len;j++)
{
if(s[j]==' ')
{
reverse(s,i,j-1);
i=j+1;
s[j]='#';//记录一个单词的结束
break;
}
}
}
else
i++;
}
for(int i=0;i<len-1;i++)
{
if(s[i]!=' ')
{
if(s[i]=='#')
{
printf(" ");
}
else{
printf("%c",s[i]);
}
}
}
printf("\n");
}
return 0;
}