文章

61

粉丝

137

获赞

18

访问

39.6k

头像
括号的匹配 题解:用的stl中的stack,总是报错Process terminated with status -1073741819 。没有死循环的情况,不知道是不是栈溢出的问题,求大佬帮忙康康
P1067 中山大学2019年机试题
发布于2024年3月23日 15:23
阅读数 523

#include<bits/stdc++.h>
using namespace std;

//设置括弧的优先级
map<char,int> bkPriority = {
    {'<', 0}, {'(', 1}, {'[', 2}, {'{', 3}
};
    //设置括弧的匹配
map<char,char> bkMatch = {
    {'>',  '<'}, {')', '('}, {']', '['}, {'}', '{'}
};

bool match(string s){
    int slen = s.size();
    stack<char> stk;
    for(int i = 0;i < slen; i++){
            if(s[i] == '<' || s[i] == '(' || s[i] == '[' || s[i] == '{'){ //左括弧入栈处理
                if(bkPriority[s[i]] > bkPriority[stk.top()])    //判断括号的优先级顺序正确
                    return false;
                stk.push(s[i]);
            }else{      //右括弧出栈匹配处理
                if(stk.empty())
                    return false;
                else if(stk.top() != bkMatch[s[i]])
                    return false;
                else
                    stk.pop();
            }
    }
    if(stk.empty())
        return true;
    else
        return false;
}


int main() {
    int...
登录查看完整内容


登录后发布评论

2 条评论
snake VIP
2024年3月23日 18:16

stk.top()之前要确保栈不为空

赞(1)

Cookie‘s AE86 : 回复 snake: 确实是的,感谢大佬

2024年3月24日 11:27