You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++使用stack实现句子单词逆序时栈无法压入元素求助

C++按单词逆序输出代码问题修复

存在的问题

  • 输入读取逻辑错误:cin >> s默认以空白字符为分隔符,遇到空格就会终止读取,你输入的带空格的整句只会被读取到第一个单词,字符串s中不存在空格,永远不会触发else分支的压栈逻辑,这是栈大小始终为0的核心原因。
  • 末尾单词漏压栈:即便解决输入问题,遍历完整个字符串后,最后一个单词后没有空格,不会触发压栈操作,会导致最后一个单词遗漏。
  • 栈遍历条件错误:for (int i = 0; i < stk.size(); i++)的逻辑存在缺陷,每次pop后stk.size()会持续减小,而i持续递增,会导致循环提前终止,无法输出全部栈内元素。

修正后的完整代码

#include<bits/stdc++.h>
using namespace std;

int main() {
    string s;
    // 改用getline读取整行包含空格的内容
    getline(cin, s);
    string temp;
    stack<string> stk;
    for (int i = 0; i < s.size(); i++) {
        if (s[i] != ' ') {
           temp.push_back(s[i]);
        } else {
            stk.push(temp);
            temp = "";
        }
    }
    // 循环结束后把最后一个单词压入栈
    if (!temp.empty()) {
        stk.push(temp);
    }
    // 改用while判断栈非空来遍历
    while (!stk.empty()) {
        cout << stk.top() << " ";
        stk.pop();
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Ballantines

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:45:04