给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过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("\n"); 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("\n"); 50 return 0; 51 }
错误就在于那个flag,导致格式错误,不过我不知道为什么会这样,希望哪位大神看到可以给我解答一下。