【发布时间】:2022-01-05 04:08:07
【问题描述】:
我想以相反的顺序显示一个句子。例如“我有钱”到“我有钱”。我使用过这样的堆栈,但我不明白为什么我不能将元素推入堆栈(最后检查时堆栈大小始终 = 0)
#include<bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
string temp;
stack<string> stk;
for (int i = 0; i < s.size(); i++) {
if (s[i] != ' ') {
temp.push_back(s[i]);
cout << temp << endl;
} else {
stk.push(temp);
temp = "";
}
}
for (int i = 0; i < stk.size(); i++) {
cout << stk.top() << endl;
stk.pop();
}
cout << stk.size();
}
【问题讨论】:
-
这里有几件事需要解决,但首先是:当你执行“stk.pop()”时,你会自动从堆栈中删除顶部元素。代码末尾的 for 循环将遍历堆栈,打印出所有元素并清空堆栈。这就是为什么在循环之后大小始终为 0。
-
可以删除第一个
for循环,简单地说:std::istringstream strm(s); while (strm >> temp) stk.push_back(temp);无需检查空格或其他逻辑,例如将temp设置为空字符串。 -
@Ballantines 不,输入有问题。
std::cin >> s;将在第一个空白处停止读取。最后一个循环也有问题。每次迭代都会增加i,但也会减少stk.size(),所以你只处理一半的元素。 -
您应该使用
std::getline读取字符串,而不是cin。你应该打印出你读入的值,你会看到它在第一个空格之后不包含任何单词。