我想检查方括号是否在正确的位置,但是我的代码执行不正确

时间:2018-12-17 09:17:53

标签: c++

这是我的代码,它现在可以正常工作,但是没有给出期望的输出 ex对于eq {a +(b-c)* d},输出应为
“括号匹配的弹出窗口)
括号匹配弹出}“
但是输出是
“支架剂量不匹配”

#include <bits/stdc++.h>
using namespace std;
main() {    
    string exp;
    cin >> exp;
//  cin.getline(exp);
    stack <char> s;
    for(int i = 0; exp[i] != '\0'; i++) {
        if(exp[i] == '{' || exp[i] == '(' || exp[i] == '[') {
            s.push(exp[i]);
            continue;
        } else if(exp[i] == '}' || exp[i] == ')' || exp[i] == ']') {
            if(s.top() == exp[i]) {
                cout << "bracket matched popping " << s.top() << endl;
                s.pop();
                continue;
            } else {
                cout << "bracket dose not matched" << endl;
                break;
            }
        } else {
            continue;
        }
    }
}

3 个答案:

答案 0 :(得分:4)

因为(不是)不是[不是]或{不是}

当您阅读(必须按)而不是(等)时,或者您必须更改测试(s.top() == exp[i])

答案 1 :(得分:0)

此行是错误的,C ++字符串不是以null结尾的

for(int i = 0; exp[i] != '\0'; i++) {

这样做

for(size_t i = 0; i < exp.size(); i++) {

答案 2 :(得分:0)

您对括号匹配项的比较是错误的:

  if(s.top() == exp[i]) {

这意味着您希望'('关闭'('。

您需要将该比较扩展到相应的预期开头括号内-即,如果当前遇到']',则需要检查堆栈中的'[';不检查是否相等,而是显式检查s.top()和exp [i]值;只是给您一个想法:

} else if (exp[i] == '}' || exp[i] == ')' || exp[i] == ']') {
       if ((s.top() == '(' && exp[i] == ')') ||
           //... check for '[' matching ']' and '(' matching ')'...