PAT  说反话-加强版   (20分)

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:

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

输出格式:

每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例:

Hello World   Here I Come

输出样例:

Come I Here World Hello


先放正确代码
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 
 8 int main()
 9 {
10     char s[500005];
11     gets(s);
12     int len=strlen(s),i,j;
13     bool flag=false;
14     for(i=len-1;i>=0;i--)
15     {
16         if(s[i]==' '&&s[i+1]!=' ')
17         {
18             if(flag)
19                 printf(" ");
20             for(j=i+1;j<len;j++)
21             {
22                 if(s[j]==' ')
23                     break;
24                 printf("%c",s[j]);
25                 flag=true;
26                     
27             }
28         }
29         else if(!i&&s[i+1]!=' ')
30         {
31             if(flag)
32                 printf(" ");
33             for(j=i;j<len;j++)
34             {
35                 if(s[j]==' ')
36                     break;
37                 printf("%c",s[j]);
38                 flag=true;
39             }
40         }
41     }
42     printf("
");
43     return 0;
44 }

再放错误的

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 
 8 int main()
 9 {
10     char s[500005];
11     gets(s);
12     int len=strlen(s),i,j;
13     bool flag=false;
14     for(i=len-1;i>=0;i--)
15     {
16         if(s[i]==' '&&s[i+1]!=' ')
17         {
18             if(!flag)
19             {
20                 flag=true;
21             }
22             else
23                 printf(" ");
24             for(j=i+1;j<len;j++)
25             {
26                 if(s[j]==' ')
27                     break;
28                 printf("%c",s[j]);
29                     
30             }
31         }
32         else if(!i&&s[i+1]!=' ')
33         {
34             if(!flag)
35             {
36                 flag=true;
37             }
38             else
39                 printf(" ");
40             for(j=i;j<len;j++)
41             {
42                 if(s[j]==' ')
43                     break;
44                 printf("%c",s[j]);
45                     
46             }
47         }
48     }
49     printf("
");
50     return 0;
51 }

错误就在于那个flag,导致格式错误,不过我不知道为什么会这样,希望哪位大神看到可以给我解答一下。

原文地址:https://www.cnblogs.com/Annetree/p/6512016.html