首页 > 解决方案 > 检查平衡括号的解决方案无法正常工作

问题描述

我正在解决一个“检查平衡括号”问题,如果括号'以正确的顺序放置,我应该输出“成功”,如果括号'不匹配,我必须输出基于 1 的索引字符串中不匹配的括号。

这是我的问题的源代码:

#include <iostream>
#include <stack>
#include <string>

using namespace std;

char get_pair_opening_bracket( char c );
int bracket_check( string &s );

char get_pair_opening_bracket( char c ){
    char o{};
    if( c==')' ){
        o= '(';
        return o;
    }
    else if( c=='}' ){
        o= '{';
        return o;
    }
    else if( c==']' ){
        o= '[';
        return o;
    }
}

int bracket_check(  string &s ){
    stack <char> brackets {};

    for( size_t i{}; i< s.size();++i ){
        if(( s[i]=='(') || ( s[i]== '[' ) || ( s[i]=='{' )){
            brackets.push(s.at(i));
        }
        else if(( s[i]==')') || ( s[i]== ']' ) || ( s[i]=='}' )){
            if( (brackets.empty()==true) || (brackets.top()!=get_pair_opening_bracket(s[i]) )){ 
                return (i+1) ; // problem here
            }
            else{
                brackets.pop();
            }
        
        }
    }
    if( brackets.empty()==true ){
        return 0;
    }
}

int main(){
    string s{};
    getline(cin,s);

    bool check{};
    check= bracket_check(s);

    if( check ==0 ){
        cout<<"Success"<<endl;
    }
    else{
        cout<<check<<endl;
    }

    return 0;
} 

我已经评论了我认为问题所在的行,这导致程序在括号不匹配的情况下始终输出“1”。所以,请帮我解决这个错误......

标签: c++stack

解决方案


其实我认为主要问题在这里

bool check{};
check= bracket_check(s);

您将整数返回值分配给布尔值。所以毫不奇怪,你只会得到 0 或 1 的答案。

您还有其他问题,更多实例如果输入是,您的函数将返回"("什么?

顺便说一句,我看到这种风格相当多size_t i{};。有什么问题size_t i = 0;?对于像我这样的老前辈来说,理解起来要容易得多。


推荐阅读