PTA 6-5 说反话-加强版 (C)(通俗易懂还有图解)
要求: 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
这道题看起来简单,实际上是我太菜了,一开始我想当然想用最简单的方法暴力一下。
错误示例
#include
main()
{ char ch;int i,k=0,flag=1;char a[2500][250000];for(i=0;;i++){ while((ch=getchar())==' '){ if(ch=='\0'||ch=='\n')break;}a[i][0]=ch;int j=1;while((ch=getchar())!=' '){ if(ch=='\0'||ch=='\n'){flag=0;break;}a[i][j++]=ch;}if(flag==0)break;k++;}printf("%s",a[k]);for(i=k-1;i>=0;i--)printf(" %s",a[i]);
}
结果发现答案没一个对,要不然段错误,要不然格式错误,要不然运行超时。
想了好久,最后————
正确示例:
#include
#include
main()
{ int len,flag=0,count=0;//flag用来标记第一个空格。char a[500001];char *p[250000];//一个指针数组用来指向每个单词的首地址。gets(a);len=strlen(a);for(int i=0;i0;i--){printf("%s ",p[i]);}if(p[0]!=NULL)//很关键,是一个测试点,当输入为空格时。printf("%s",p[0]);}
上个 图解: