给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
int main() {
char *s1=(char*)calloc(500001,sizeof(char));//在申请内存空间的时候进行了初始化
gets(s1);
char *s2=(char*)calloc(500001,sizeof(char));//在申请内存空间的时候进行了初始化
int length=strlen(s1);//得到s1的字符串的长度
int i=length-1;
int word=0;//计算每个单词的长度
int j=0;
for(;i>=0;i--)//从后遍历原始字符串 :以空格分隔单词
{
if(s1[i]==' '||i==0)//到了空格处或者原始字符串的开头,把单词复制给s2
{
if(word!=0)//保证单词间只有1个空格:当原始字符串有两个空格时,不输出空格
{
int m=1;
if(i==0&&(s1[i]!=' '))//到了开头 :开头可能就是空格
m=0;
for(;m<=word;m++,j++)
{
s2[j]=s1[i+m];
}
if(i!=0)
{
int n=i;
for(n;n>=0;n--)
{
if(s1[n]!=' ') //后面还有单词输出空格
{
s2[j]=' ';
break;
}
}
}
j++;
word=0;
}
}
else
{
word++;
}
}
puts(s2);
free(s1);
free(s2);
return 0;
}