c++ :括号匹配

c++ :括号匹配
题目描述
假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“}”,且这三种括号可按任意的次序嵌套使用(如:…[…{… …[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的算法。输出结果YES 或者 NO。
输入
5+{[2X5]+2}
输出
YES
样例输入 Copy
8-[{2+7]}
样例输出 Copy
NO

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int main ( )
{

    char ans[10000] , bns[10000] ,cns[10000];
    int n;
    int i,j;
    while ( ~ scanf( "%s" , ans ))
    {
        for( j=0,i=0 ; i < strlen(ans) ; i++ )
        {
           
            if(ans[i]=='('||ans[i]==')'||ans[i]=='['||ans[i]==']'||ans[i]=='{'||ans[i]=='}')
                bns[j++]=ans[i];
        }
        int f=0,k=0;
        for( i=0;i<j;i++)
            {
                switch(bns[i])
                {
                    case '(':
                    case '[':
                    case '{':cns[k++]=bns[i];
                    break;
                    case ')':
                    case ']':
                    case '}':
                        if(bns[i]==')')
                        {
                            if(cns[k-1]!='(')
                            {
                                f=1;
                                printf("N0\n");
                                break;
                            }
                            else
                            {
                                cns[--k]='\0';
                            }
                        }
                        else if(bns[i]==']')
                        {
                            if(cns[k-1]!='[')
                            {
                                f=1;
                                printf("NO\n");
                                break;
                            }
                            else
                            {
                                cns[--k]='\0';
                            }
                        }
                        else if(bns[i]=='}')
                        {
                            if(cns[k-1]!='{')
                            {
                                f=1;
                                printf("NO\n");
                                break;
                            }
                            else
                            {
                                cns[--k]='\0';
                            }
                        }
                }
                if(f==1)
                    break;
            }
            if(f==0)
                printf("YES\n");
    }
    return  0 ;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的自我修养~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值