给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
/***************************************************/
分析:
error:1.对stack的理解不够深入,以为stack的每一场空间只能放一个元素,比如一个数字或者一个字母,实际上是可以放一个变量,比如a=“1234”,s=“asdasd”。
2.getline()函数是读取一行字符串,当遇到如下三种情况会结束读操作:1)到文件结束,2)遇到函数的定界符,默认为换行符 3)输入达到最大限度。
我之前将if(i==str.length()-1)写为if(str[i]=='\n'),但是发现stack中始终么有str中最后一串。比如str=“asd df as”,stack中只有asd和df。后来发现是对getline()函数理解不到位,它遇到换行符就停止读操作,并且不会将换行符读入str中。
/**************************************************/
#include <iostream>
#include <stack>
using namespace std;
int main() {
int sign=0; //控制输出的标志
stack<string> v; //定义一个存放string类型数据的stack'
string str;
getline(cin,str); //读取字符串
string arr="";
for(int i=0;i<str.length();i++) //将字符串以‘’为界限分开存入stack
{
if(i==str.length()-1)
{
arr+=str[i];
v.push(arr);
break;
}
if(str[i]!=' ') arr+=str[i];
else{
v.push(arr);
arr="";
}
}
while(!v.empty()) { //输出
if(sign==1) cout<<" ";
cout<< v.top();
v.pop();
sign=1;
}
return 0;
}