1009. 说反话 (20)——stack<struct/class>、sscanf()

来源:互联网 发布:mac如何导入手机照片 编辑:程序博客网 时间:2024/06/05 01:01

1、题目描述

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

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

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

输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
2、思路分析
倒序输出英文单词,可以借助堆栈的后进先出的思想。
此题的输入是一个包含空格的字符串,可以考虑用gets(char input[])获取包含空格的整个语句,再对其遍历求分割。
此外,也可以考虑利用cin和scanf的自动过滤空格的功能,在接受输入时直接获得分割好的单词,但是需要利用getchar()或cin.get()函数来设置循环的出口。
3、C++代码
#include<iostream>#include<algorithm>#include<string.h>#include<stdio.h>#include<vector>#include<string>#include<stack>#include<queue>#include<math.h>#include<map>using namespace std;struct word{char data[81];}temp;stack<word> S;void Input(){while(true){cin>>temp.data;S.push(temp);if(getchar()=='\n')break;}}void Process(){}void Display(){printf("%s",S.top().data);S.pop();while(!S.empty()){printf(" %s",S.top().data);S.pop();}printf("\n");}int main(){//while(true){Input();Process();Display();//}return 0;}
<pre class="cpp" name="code">#include<iostream>#include<algorithm>#include<string.h>#include<stdio.h>#include<vector>#include<string>#include<stack>#include<queue>#include<math.h>#include<map>using namespace std;char A[81],Temp[81];void Input(){gets(A);int i=strlen(A)-1;while(i>=0){for(;i>0&&A[i]!=' ';i--);if(A[i]==' '){sscanf(A+i+1,"%s",Temp);printf("%s ",Temp);}else if(i==0){sscanf(A,"%s",Temp);printf("%s\n",Temp);}i--;}}void Process(){}void Display(){}int main(){//while(true){Input();Process();Display();//}return 0;}


                                             
0 0