我必须编写一个接受字符串并返回bool的函数。传入的字符串是ex。({[]})打开或关闭的一系列或不同的括号,并返回'parens'是否均衡。这必须通过向堆栈添加项目来实现。我收到以下错误:
parenMatching_demo.cpp:18:12:错误:'c中'运营商=='不匹配 =='('
psudocode是:
matcher(expression)
for each character in expression
if the character is an opener
push on stack
else if the character is a closr
if stack is empty return false
if the (opener at) the top of the stack does not match the closer
return false
pop the stack
if the stack is not empty return false
return true
这就是我所拥有的。
template <typename T>
bool parenMatching(string c) {
stack<string> s;
for (int i = 0; i < s.size(); i++) {
if (c == '(' || c == '[' || c == '{' || c == '<')
s.push(c);
else if (c == ')' || c == ']' || c == '}' || c == '>') {
if (s.empty()) return false;
if (s.top() != '(' || s.top() != '[' || s.top() != '{' || s.top() != '<')
return false;
s.pop();
}
}
}
答案 0 :(得分:9)
一个问题是堆栈的类型,它应该是
stack<char> s;
然后是for
循环,条件应该是
i < c.size()
下一个问题是
if (c == '(' || c == '[' || c == '{' || c == '<')
不会比较c
处字符串i
的字符,因此您需要
const char c2 = c[i];
if (c2 == '(' || c2 == '[' || c2 == '{' || c2 == '<')
如果您需要帮助来解决剩下的问题,请告诉我/我们。)
答案 1 :(得分:2)
您在代码中将字符串与字符进行比较,以检查括号。当你迭代你的字符串时,你错过了一个你正在查看当前字符的行 - 你可能想要这样的东西:
char current = c.at(i);
此外,你需要修复你的堆栈类型,就像Daniel Frey在他的回答中所说的那样。
编辑 - 他已经改变了他的信息,因此答案应该包含你需要的一切。