1009 说反话 (20 分)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
我的代码(使用递归)
#include<stdio.h>
int main(){
char str[90][90];
int num=0;
while(scanf("%s",str[num])!=EOF) num++;
for(int i=num-1;i>=0;i--){
printf("%s",str[i]);
if(i>0) printf(" ");
}
printf("\n");
return 0;
}
心得:
刚开始我用的是退格转义字符 '\b' ,是为了消除掉最后一个的空格字符,但是在我经过测试用例的时候发现PTA十分的严格,也不会将 '\b' 消除前面的字符,而是其当作其他额外的字符。所以只能在循环语句中,再次判断是否为最后一个单词进行输出空格。
注意:while(scanf("%s",str[num])!=EOF)进行输入读取的时候要输入ctrl+z,不然程序不知道停止。
附上转移表:
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) | 009 |
\v | 垂直制表(VT) | 011 |
' | 单引号 | 039 |
" | 双引号 | 034 |
|反斜杠 | 092 |