题目
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式
测试输入包含一个测试用例,在一行内给出总长度不超过 500000 500 000 500000 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有 1 1 1 个空格。
输入样例
Hello World Here I Come
输出样例
Come I Here World Hello
题解
解题思路
利用堆栈先出后进的思想存储,首先输入一串字符,将每一个单词分别存入堆栈中(遇到一次空格就将当前单词压入堆栈中),然后遇到回车时开始输出,用一个变量控制空格的输出,然后一次将堆栈中的单词输出即可。
完整代码
#include <stack>
#include <string>
#include <iostream>
using namespace std;
int main(void)
{
string Word; // 输入一个单词
int flag = 0; // 输出空格控制
stack<string> stack;
cout << "请输入一串字符串:"; // 提交时注释此行
while (cin.peek() != '\n') // cin.peek()返回值是一个char型字符,返回值是指针指向的当前字符,只观测指针停留在当前位置不后移
{
if (cin.peek() == ' ')
cin.get(); // cin.get()从指定的输入流中提取一个字符(包括空白字符),函数的返回值是读入的字符
else
{
cin >> Word;
stack.push(Word);
}
}
cout << "字符串倒叙输出为:"; // 提交时注释此行
while (!stack.empty())
{
if (flag)
cout << " ";
else
flag = 1;
cout << stack.top();
stack.pop();
}
return 0;
}