文章目录
题目
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式
测试输入包含一个测试用例,在一行内给出总长度不超过 500000 500 000 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有 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; }