将一个英文语句以单词为单位逆序排放,例如“I am a boy”,逆序排放后为“boy a am I”

163 阅读1分钟

算法打卡day11 2023.1.18

题目描述

将一个英文语句以单词为单位逆序排放,例如“I am a boy”,逆序排放后为“boy a am I”,所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符,数据范围:输入的字符串长度满足:1 ≤n ≤ 1000

输入描述:

输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母

输出描述:

得到逆序的句子

示例1

输入:I am a boy
输出:boy a am I

思路

利用栈先进后出的特点,输出后输入的单词,完成翻转句子。

具体实现

#include<iostream>
#include<string>
#include<algorithm>
#include <stack>
using namespace std;
 
int main(){
    cout << "请输入:";
    string s;
    getline(cin, s); 
    int n = s.length();
    stack<string> st;
    for(int i = 0; i < n; i++){ 
        int j = i;
        while(j < n && s[j] != ' ')  
                j++;
            st.push(s.substr(i, j - i));  
            i = j;
    }
    while(!st.empty()){  
            
            cout << st.top() << " ";
            st.pop();
    }
    return 0;
}

 

时间复杂度

O(n)

小结

注意对库函数的利用,要熟悉和学会运用各种数据结构,根据题目的不同,在了解题目目标后,这题用先进后出的栈可以很快实现翻转。