3

我必须编写一个接受字符串并返回布尔值的函数。传入的字符串是一系列或不同的括号打开或关闭 ex.({[]}) 并返回“parens”是否平衡。这必须通过将项目添加到堆栈来实现。我收到以下错误:

parenMatching_demo.cpp:18:12: 错误: 'c == '(' 中的 'operator==' 不匹配

伪代码是:

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();
        }
    }
}
4

2 回答 2

9

一个问题是堆栈的类型,应该是

stack<char> s;

然后for循环,条件应该是

i < c.size()

下一个问题是

if (c == '(' || c == '[' || c == '{' || c == '<')

不比较字符串cat的字符i,因此您需要

const char c2 = c[i];
if (c2 == '(' || c2 == '[' || c2 == '{' || c2 == '<')

如果您需要帮助来解决其余问题,请告诉我/我们 :)

于 2013-04-19T21:33:40.207 回答
2

您在检查括号的代码中将字符串与字符进行比较。当你迭代你的字符串时,你错过了一个你正在查看的当前字符的行——你可能想要这样的东西:

char current = c.at(i);

此外,正如 Daniel Frey 在他的回答中所说,您需要修复您的堆栈类型。

编辑 - 他已经更改了他以包含此信息,因此该答案应该包含您需要的一切。

于 2013-04-19T21:40:15.693 回答