7-32 说反话-加强版(20 分)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
输出样例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #include <stdio.h>
char a[500001]; char *p; int i; int m=0; int flag=0; int num=0;
int main() { for(i=0;i<500001;i++){ scanf("%c",&a[i]); if(a[i]=='\n'){ m=i; a[i]='\0'; break; } }
for(i=m-1;i>=0;i--){ if(a[i]!=' '&&a[i-1]!=' '&&i!=0){ num++; }else if(a[i]!=' '&&a[i-1]==' '){ num++; flag++; p=&a[i]; }else if(a[i]!=' '&&i==0){ num++; flag++; p=&a[i]; }
if(flag==1&&num!=0){ for(;num>0;num--){ printf("%c",*p); p++; } num=0; flag++; }else if(flag>1&&num!=0){ if(a[i-1]==' '||i==0){ printf(" "); for(;num>0;num--){ printf("%c",*p); p++; } num=0; } } } return 0; }
|