PAT 1009 说反话

输入格式:

测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。

输出格式:

每个测试用例的输出占一行,输出倒序后的句子。

输入样例:

Hello World Here I Come

输出样例:

Come I Here World Hello

 

结果:

 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 int main(void){
 5     char str[90];
 6     fgets(str,90,stdin);
 7     int len = strlen(str);
 8     int r = 0, h = 0;
 9     char ans[90][90] = {""};
10     for(int i = 0;i<len; i++){
11         if(str[i] == '
'){
12             
13         }else if(str[i] != ' '){
14           ans[r][h++] = str[i];
15         }
16         else{
17             r++;
18             h = 0;
19             ans[r][h] = '';
20         }
21     }
22     for(int i = r; i >= 0;i--){
23         printf("%s",ans[i]);
24         if(i>0) printf(" ");
25     }
26     getchar();
27     return 0;
28 }

备注:

获得1:此题目最头痛的是对于str[90]的处理,按照教材基本学习要求,提供了gets函数,但是在PAT环境中根本不可以使用,就好像这个函数已经被删除了一样。换用fget(str,90,stdin)进行。但是这个函数在处理的时候与gets有很大的不同。最大的特点是str最后两个字符是 10(换行符),0()。所以对于这个特殊的尾巴需要增加特殊处理。

获得2:目前从编译结果来看,经常会有warning,比如使用scanf,fget的时候,虽然标准化达到了非常好的要求,但是这些函数的返回值不可以忽略,解决方法是正视返回值,不忽视异常存在的可能。(实际上在PAT中输入是不可能异常的);另一个方法是弃用scanf,用cin代替。无论如何代替,一定要注意的是,cin和scanf不可以同时存在,这样会引起无法预料的结果。

原文地址:https://www.cnblogs.com/bobyin/p/10350097.html