原解:
#include<cstdio>
#include<cstring>
int main(){
char a[128];
scanf("%[^\n]",a);
int flag;
flag = strlen(a);
for(int i=strlen(a);i>=0;i--){
if(a[i]==' '){
int j=i+1;
for(;j<flag;j++)
printf("%c",a[j]);
printf(" ");
flag=i;
}
}
for(int i=0;i<flag;i++){
printf("%c",a[i]);
}
return 0;
}
上解相对比较暴力,参考《算法笔记》中的题解重做如下:
#include<cstdio>
int main(){
int num = 0;//words num
char ans[90][90]; // store space
while(scanf("%s",ans[num])!=EOF){
num++;
}
for(int i=num-1;i>=0;i--){
printf("%s",ans[i]);
if(i>0)printf(" ");
}
return 0;
}
注意scanf 自身对于空格的要求,在此基础上设计二维字符集合储存单词,倒序输出,除最后一个单词,其余单词后加空格。
很明显代码长度要远小于自己的解。