4 括号匹配

这篇博客介绍了如何实现一个检查括号匹配的算法,包括对圆括号、方括号和花括号的嵌套处理。作者分享了在解决这个问题时遇到的困难和调试过程,并提供了C语言的代码实现。代码通过栈数据结构来匹配左右括号,如果输入的括号不匹配或有多余的括号,程序会输出相应的错误信息。最后,博主提到还有其他解决方法,但因为疲劳而暂未展开讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4 括号匹配/*这题啊,说实话,真不容易,前前后后我问了其他同学好多次,才搞出这套代码,结果还出现段错误!!!经过反复调试才搞好*/

/*这题我问道的方法是,将左括号的内容先输入,在对比右括号内容,匹对则退位,具体内容可以看代码*/

分数 20

描述:

假设表达式中只包含三种括号:圆括号、方括号和花括号,它们可相互嵌套,如([{}])或({[][()]})等均为正确的格式,而{[]})}或{[()]或([]}均为不正确的格式.

输入一串括号

如果输入的右括号多余,输出:Extra right brackets

如果输入的左括号多余, 输出:Extra left brackets

如果输入的括号不匹配,输出:Brackets not match

如果输入的括号匹配,输出:Brackets match

输入格式:

一行只含 ( ) [ ] { } 这6种字符,不含其它任何字符的字符串。字符串不超过1000个字符。

输出格式:

如果输入的右括号多余,输出:

Extra right brackets
    

如果输入的左括号多余, 输出:

Extra left brackets
    

如果输入的括号不匹配,输出:

Brackets not match
    

如果输入的括号匹配,输出:

Brackets match
    

输入样例:

{{{{)))

输出样例:

Brackets not match

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

代码如下:

#define shuiyunsheng 6666666

#define _CRT_SECURE_NO_WARNINGS
#include <malloc.h>
#include <stdio.h>
#include<string.h>

int main()
{
    char a[1001];
    scanf("%s", a);
    char satck[1000] = { 0 };
    int n = strlen(a);
    int i = 0, t = 0;
    while (i<n)
    {
        if (a[i] == '(' || a[i] == '[' || a[i] == '{')
        {
            satck[t++] = a[i];
        }
        else
        {
            if (a[i] == ')')
            {
                if (t == 0)
                {
                    printf("Extra right brackets");
                    return 0;
                }
                else if (satck[t - 1] == '(')
                {
                    t--;
                }
                else
                {
                    printf("Brackets not match\n");
                    return 0;
                }
            }
            if (a[i] == ']')
            {
                if (t == 0)
                {
                    printf("Extra right brackets");
                    return 0;
                }
                else if (satck[t - 1] == '[')
                {
                    t--;
                }
                else
                {
                    printf("Brackets not match\n");
                    return 0;
                }
            }
            if (a[i] == '}')
            {
                if (t == 0)
                {
                    printf("Extra right brackets");
                    return 0;
                }
                else if (satck[t - 1] == '{')
                {
                    t--;
                }
                else
                {
                    printf("Brackets not match\n");
                    return 0;
                }
            }
        }
        i++;
    }
    if (t <= 0)
        printf("Brackets match\n");
    else
    {
        printf("Extra left brackets\n");
    }
}
/*其实还有其他方法,看后续,现在不想写了,好累!!!*/


/* 请在这里填写答案 */

/* 请在这里填写答案 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值