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
相关产品推荐
相关产品推荐

