给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
这题的关键我认为是怎么消去单词之间多个空格,单词开头的空格和单词结尾的空格,使单词之间只有一个空格,一开始我的想法是用指针做的,但没做出来。
程序清单:
#include<stdio.h>
#include<string.h>
#define maxn 500001
int main()
{
char a[maxn];
int k,count=0;
gets(a);
int len=strlen(a);
int max=len-1; //max是最后一个下标
int first=1; //用于判断是不是第一个要输出的单词
while(a[max]==' ')max--; //用于清除输入时最后一个单词后面的空格
for(;max>=0;max--) //从最后一个开始向前排查
{
while(a[max]!=' ')
{
if(max==0)break;
max--;count++; //单词的字母个数count
}
if(max==0&&a[max]!=' ') //如果max已经减到了开头
{
k=max;
count++;
}
else k=max+1; //此时max所在位置是一个空格,+1使k为单词首字母
if(first==1)
{
for(;count>0;k++)
{
printf("%c",a[k]);
count--;
}
}
else if(count>0)
{
printf(" "); //如果不是第一个单词,前面输出一个空格
for(;count>0;k++)
{
printf("%c",a[k]);
count--;
}
}
first=0; //在一次循环之后就使first=0
}
}
我用指针的想法是定义一个指针数组,元素是多个指针,分别指向单词的首字母,输入时输入一个二维数组,可以看成一个由多个字符串组成的数组,之后只需要逆向输入指针所指的就好了,希望有大佬满足我这个想法。