括号匹配(C++数据结构)

括号匹配(C++数据结构)

描述:给出由()、{}、[]三种类型括号所组成的字符串,判断所给字符串中的括号能否全部匹配,若能匹配,则输出true!,否则输出false!

输入输出示例
输入
({})
([{])

输出
true!
false!

此题需要用到栈(stack),为了便于简单,直接调用stack标准库,首先将所有的左括号,即(、{、[,压入栈中,然后按顺序和右括号进行匹配判断,只要有一个不能匹配成功,则匹配失败。

下面是我的代码:

#include<iostream>
#include<string.h>
#include<stack>//调用标准库
using namespace std;
int main()
{
    char s[50];
    stack<char>st;//建立一个字符型栈
    while(cin>>s)
    {
        while(!st.empty())
        {st.pop();}
        int len=strlen(s),flag=1;
        for(int i=0;i<len;i++)
        {
            if(s[i]=='('||s[i]=='{'||s[i]=='[')
                st.push(s[i]);//将左括号压入栈中
            else 
            {
                if(st.empty())
                {
                    flag=0;
                    break;  
                }
                char t=st.top();
                st.pop();
                if(s[i]==')'&&(t=='['||t=='{'))
                {
                    flag=0;
                    break;
                }
                else if(s[i]=='}'&&(t=='('||t=='['))
                {
                    flag=0;
                    break;
                }
                else if(s[i]==']'&&(t=='{'||t=='('))
                {
                    flag=0;
                    break;
                }
            }
        }
        if(!st.empty())
        flag=0;
        if(flag==1)
        cout<<"true!"<<endl;
        else
        cout<<"false!"<<endl;
    }
    return 0;
} 
    原文作者:括号匹配问题
    原文地址: https://blog.csdn.net/weixin_41204899/article/details/81480267
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞