PAT 1009 说反话
题目:
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
代码:
#include <iostream>
#include <sstream>
#include <stack>
using namespace std;
int main()
{
string input;
stack<string> words;
stringstream ss;
getline(cin,input);
ss<<input;
while(ss>>input){
words.push(input);
}//利用ss将单词依次压入words[string]栈内
while(!words.empty()){
if(words.size() <= 1){
cout<<words.top();//依次输出栈顶
words.pop();//输出后将栈顶弹出
}
else{//最后不包含空格 =.=
cout<<words.top()<<" ";
words.pop();
}
}
return 0;
}
解析:
题目要求将所输入的整个语句按照单词反向输出,使用栈的FILO特性,可以轻松实现语句的反转.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kN0BBINi-1581064932626)(file:///C:\Users\GF_EPC\AppData\Local\Temp\8b82b9014a90f603eab7c55f3912b31bb051eda7.jpg)]
先将数据使用**stack::push()压入栈内,再使用stack::top()取得栈顶,同时使用stack::pop()**将栈顶弹出.直到栈空为止(**stack::size()**可得栈内数据个数)
关于stack():
栈–>FILO先进后出,从栈顶开始移除.
size( ) :返回栈中元素个数
top( ) :返回栈顶的元素
pop( ) :从栈中取出并删除元素
push(e) :向栈中添加元素e
empty( ) :栈为空时返回true
pop( ) :从栈中取出并删除元素
push(e) :向栈中添加元素e
empty( ) :栈为空时返回true