7-50 实验9_1_括号匹配 (100 分)

任意给定一个字符串,字符串中包含除了空白符、换行符之外的任意字符。你的任务是检测字符串中的圆括号是否配对,即“(”与“)”是否配对。如字符串“((a+b)* (c+d))”中是配对的,而“((a+b)*) c+d))”则不配对。

输入格式:

一个长度不超过100的非空字符串,该字符串中不会出现空格、换行符。

输出格式:

匹配及不匹配见样例。

输入样例一:

((a+b)*(c+d))

输出样例一:

parentheses match!

输入样例二:

((a+b)*)c+d))

输出样例二:

parentheses do not match!

代码如下:

#include<stdio.h>
int main()
{
    int count1 = 0, count2 = 0;
    int f1 = 0, f2 = 0;
    int i = 0;
    char a[100] = { 0 };
    char* ac = &a;
    scanf("%s", a);
    while (*ac != 0)
    {
        if (*ac == '(')
            count1++;
        else if (*ac == ')')
            count2++;
        ac++;
    }
    for (i = 0; a[i] != 0; i++)
    {
        if (a[i] == '(')
        {
            f1 = i;
            break;
        }
    }
    for (i = 0; a[i] != 0; i++)
    {
        if (a[i] == ')')
        {
            f2 = i; 
            break;
        }
    }
     //注意)(也是不匹配的,所以也要注意方向
    if (f2 < f1)
    {
        printf("parentheses do not match!");
        return 0;
    }
    if (count1 == count2)
        printf("parentheses match!\n");
    else
        printf("parentheses do not match!\n");
    return 0;
}

 除了左右括号的个数,方向也要注意

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值