平衡表达与堆栈

时间:2014-05-07 17:03:35

标签: c++ stack

请告诉我,我做错了什么?  我需要确保表达式是平衡的 我尝试了一切,但我甚至没有得到错误

int main() {
    ifstream infile;
    infile.open("input.txt");

    string exp;
    cout << "Enter an expression ";
    while (getline(infile, exp)) {
        cout << exp << ": ";
        if (matcher(exp))
            cout << "Matched ok" << endl;
        else
            cout << "Match error" << endl;
        cout << "Enter an expression: ";
    }

    cout << "--- Done ---" << endl;

    return 0;
}

int matcher(string expression) {
    stack<char> s;
    for (int i = 0; i < expression.length(); i++) {
        if (isOpener(expression[i]))
            s.push(expression[i]);
        else if (isCloser(expression[i])) {
            if (s.empty()) return 1;    
            char opener = s.top();
            s.pop();
            if (!matches(opener, expression[i])) return 1;
        }
    }

    if (!s.empty()) return 1;
    return 0;
}

2 个答案:

答案 0 :(得分:1)

一个显而易见的问题 - 您的matcher函数似乎返回1表示失败(不匹配),0表示成功,但您的main打印{{1如果ok返回非零...

答案 1 :(得分:0)

我会假设isOpener()matches()按预期工作,因为您没有显示它们。

如果是这样,问题在于您错误解释了int -> bool次转化。零转换为false,非零整数转换为true。您最好声明matcher()返回bool并直接从中返回truefalse。您希望在false返回1,然后返回true0,现在返回{{1}}。