给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式: 每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come 结尾无空行
输出样例:
Come I Here World Hello 结尾无空行
代码如下:
#include <stdio.h>
int main(void){
char ch[500001];
gets(ch);
char *p = ch,*last = ch;
char *ans = NULL;
int f = 1,F = 0;
int count = 0,i = 0;
while(*p != '\0'){
if(*p != ' ')
F = 1;
p++;
last++;
}
if(F != 0){
while(f){
if(last == ch)
f = 0;
if(*last != ' ' && *(last-1) == ' ')
count++;
last--;
}
f = 1;
while(f){
if(*p != ' ' && *(p-1) == ' ' && *p != '\0'){
ans = p;
while(*ans != '\0' && *ans != ' '){
printf("%c",*ans);
ans++;
}
if(ch[0] != ' ')
printf(" ");
else{
i++;
if(i < count){
printf(" ");
}
}
}
if(p == ch)
{
f = 0;
if(ch[0] != ' '){
ans = p;
while(*ans != '\0' && *ans != ' '){
printf("%c",*ans);
ans++;
}
}
}
p--;
}
}
return 0;
}
运行结果如下: 以上就是本题的解答,但由于数组长度过大,导致运行效率较低。如有更好的解法,欢迎分享在评论区!!!≧???≦
|