【发布时间】:2020-05-10 16:41:43
【问题描述】:
#include <iostream>
#include <stack>
int main() {
std::string s = "()"; // Input
std::stack<char> stack_;
for (int i=0; i < s.length(); i++) {
if (s[i] == stack_.top()) {
stack_.pop();
}
if (s[i] == '(') {
stack_.push(')');
}
if (s[i] == '{') {
stack_.push('}');
}
if (s[i] == '[') {
stack_.push(']');
}
else {}
}
while(!stack_.empty()) {
std::cout << stack_.top() << std::endl;
stack_.pop();
}
return 0;
}
我对 C++ 还很陌生,并且每天都在 LeetCode.com 上做一个问题来尝试改进。我首先在 CLion 中测试我的代码,这给了我一个“进程完成,退出代码 11”错误。我要解决的问题是:https://leetcode.com/problems/valid-parentheses/
这只是简单的测试代码,我更改了字符串 s 的输入,我的策略是将括号类型放在堆栈上,然后如果匹配的右括号是下一个字符,则将它们剥离,然后如果堆栈为空最后,字符串通过了测试。
我认为退出代码 11 是内存泄漏或分段错误错误,但我无法通过查看我的代码来找出可能发生这种情况的位置。任何帮助将不胜感激。谢谢!
【问题讨论】:
-
我建议两件事。 1. 你看看如果你在 stack.top() 为空时调用它会发生什么。 2. 你学习如何使用你的调试器。 #2 对于软件的任何未来都是必不可少的
-
现在可能是学习如何使用调试器的好时机。使用调试器,您可以运行程序并在发生崩溃时捕获它们。然后,调试器将允许您查看代码中发生的位置,还允许您检查相关变量的值。
-
因为有你们的 cmets,我已经把更好地学习我的调试器作为目标。我把它推迟了 - 无法给出一个充分的理由,但你的 cmets 给了我一个很好的方向来指出自己。谢谢!