C ++括号匹配应用程序

时间:2013-04-19 21:32:03

标签: c++ data-structures stl stack

我必须编写一个接受字符串并返回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();
        }
    }
}

2 个答案:

答案 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在他的回答中所说的那样。

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