PAT 1009 说反话 (字符串)
Posted taiga
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT 1009 说反话 (字符串)相关的知识,希望对你有一定的参考价值。
题目>>
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
思路>>
想到用string解决问题,读入后从末尾开始处理,若遇到空格,即用substr返回空格后面的单词,但这样有个问题,第一个单词前面是没有空格的,所以还需要从前往后处理一遍,当遇到第一个空格就用substr输出空格前面的单词,也解决了末尾没有多余空格的问题。
1 for(int i=str.length()-1;i>=0;i--){ 2 if(str[i]!=‘ ‘){ 3 len++; 4 } 5 else if(str[i]==‘ ‘){ 6 cout<<str.substr(i+1,len)<<" "; 7 len=0; 8 } 9 }
处理完后有两个测试点是错的,因为代码默认了超过一个单词,所以要考虑一个单词的情况,直接在第二遍for循环(从前往后)的时候讨论一个单词的情况(即到最后都没有出现空格)即可。
1 for(int i=0;i<str.length();i++){ 2 if(str[i]==‘ ‘){ 3 cout<<str.substr(0,i); 4 break; 5 } 6 else if(i==str.length()-1) cout<<str; 7 }
完整代码>>
注意含有空格的string输入要用getline(cin,str);
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 string str; 5 getline(cin,str) ; 6 int len=0; 7 for(int i=str.length()-1;i>=0;i--){ 8 if(str[i]!=‘ ‘){ 9 len++; 10 } 11 else if(str[i]==‘ ‘){ 12 cout<<str.substr(i+1,len)<<" "; 13 len=0; 14 } 15 } 16 for(int i=0;i<str.length();i++){ 17 if(str[i]==‘ ‘){ 18 cout<<str.substr(0,i); 19 break; 20 } 21 else if(i==str.length()-1) cout<<str; 22 } 23 }
一开始的代码(用flag来标记是否是一个单词)
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 string str; 5 getline(cin,str) ; 6 int len=0; 7 int flag=0;//判断是否是单个单词 8 for(int i=0;i<str.length();i++){ 9 if(str[i]==‘ ‘) flag=1; 10 } 11 12 if(flag==0) cout<<str; 13 else{ 14 for(int i=str.length()-1;i>=0;i--){ 15 if(str[i]!=‘ ‘){ 16 len++; 17 } 18 else if(str[i]==‘ ‘){ 19 cout<<str.substr(i+1,len)<<" "; 20 len=0; 21 } 22 } 23 for(int i=0;i<str.length();i++){ 24 if(str[i]==‘ ‘){ 25 cout<<str.substr(0,i); 26 break; 27 } 28 } 29 } 30 }
解法二(EOF)>>
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 char str[81][81]; 5 int n=0; 6 while(scanf("%s",str[n])!=EOF){ 7 n++; 8 } 9 for(int i=n-1;i>=0;i--){ 10 printf("%s",str[i]); 11 if(i>0) printf(" "); 12 } 13 }
当scanf返回值不为-1的时候反复读取单词。
解法三(常规)>>
存入二维数组倒序输出。
以上是关于PAT 1009 说反话 (字符串)的主要内容,如果未能解决你的问题,请参考以下文章