编程题 7-32 说反话-加强版【PAT】

编程练习题目集目录

题目

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

输入格式

测试输入包含一个测试用例,在一行内给出总长度不超过 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;
}

猜你喜欢

转载自blog.csdn.net/qq_41918107/article/details/143212371