PTA 7-7 括号匹配 (18分)

PTA 7-7 括号匹配 (18分)

输入格式:

在一行中输入一段C语言代码,长度不超过1000个字符(行末以换行符结束)。
输出格式:

第一行输出左括号的数量和右括号的数量,中间以一个空格间隔。
若括号是匹配的,在第二行打印YES,否则打印NO。
输入样例1:

for(int i=0; i<v; i++){ visited[i] = 0; for(int j=0; j<v; j++) scanf("%d",&(g->Adj[i][j])); }

输出样例1:

8 8
YES

输入样例2:

for(int i=0; i<v; i++) a(i]=0;

输出样例2:
2 2
NO

#include<stdio.h>
#include<string.h>
int main()
{
    char a[1005],b[1005],c[1005];
    int b1=0,c1=0,len,k=0,top=-1,m=0;
    gets(a);
    len=strlen(a);
    for(int i=0;i<len;i++)
    {   //将输入字符串中括号按顺序存入b数组
        if(a[i]=='{'||a[i]=='('||a[i]=='[')
            {
                b[k++]=a[i];
                b1++;//b1计左括号个数
            }
        if(a[i]=='}'||a[i]==')'||a[i]==']')
            {
                b[k++]=a[i];
                c1++;//c1计右括号个数
            }
    }
    printf("%d %d\n",b1,c1);
    for(int j=0;j<k;j++)
    {//遇左括号入栈,b[j]为右括号时必须出栈,否则"NO",eg:"(})",保证每次循环进一个if
        if(b[j]=='('||b[j]=='['||b[j]=='{')
        {
            top++;
            c[top]=b[j];
            m++;
        }
        if(b[j]==')'&&c[top]=='('||b[j]==']'&&c[top]=='['||b[j]=='}'&&c[top]=='{')
        {
            top--;
            m++;
        }
    }
    if(top==-1&&m==k)
        printf("YES");
    else
        printf("NO");
    return 0;
}

在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值