c++ - 堆栈的平衡表达

标签 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;
}

最佳答案

一个明显的问题 -- 您的 matcher 函数似乎在失败时返回 1(不匹配),在成功时返回 0,但是您的如果 matcher 返回非零值,main 打印 ok...

关于c++ - 堆栈的平衡表达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23523971/

相关文章:

html - 图 slider "Stacks"

c++ - openmp Linux 中的段错误

c++ - 指向释放变量的指针更改地址

C++:将流中的小数解析为 uint8_t

java - 使用 Stacks 的类似俄罗斯方 block 的小程序——从顶部弹出

java - 最小化 Java 堆栈跟踪的内容

C++ 创建随机形状的 "blob"对象

c++ - 我的哈希键类型和函数有什么问题?

java - 带堆栈的交换机路由(java语言)

java - 背包式算法