栈—-7-9 括号匹配

作者 : admin 本文共926个字,预计阅读时间需要3分钟 发布时间: 2024-06-10 共3人阅读

给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。

输入格式:

输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。

输出格式:

如果括号配对,输出yes,否则输出no。

输入样例1:

sin(10+20)

输出样例1:

yes

输入样例2:

{[}]

输出样例2:

no

代码演示:22分

事实上,在test==1还不能完全说明匹配成功,因为可能是{【】{}这样的情况,最后剩下{,是不匹配的,然而test==1。所以最后的判断应该是top==-1;

#include
#include

int check(char *s, int top, char op) {
    if (op == ')') {
        if (s[top] == '(')
            return 1;
    } else if (op == ']') {
        if (s[top] == '[')
            return 1;
    } else if (op == '}') {
        if (s[top] == '{')
            return 1;
    }
    return 0;
}

int main() {
    char op[100];
    scanf("%s", op);
    int len = strlen(op);

    char s[100];
    int top = -1;
    int test;

    for (int i = 0; i < len; i++) {
        //入栈
        if (op[i] == '(') {
            s[++top] = '(';
        } else if (op[i] == '[') {
            s[++top] = '[';
        } else if (op[i] == '{') {
            s[++top] = '{';
        }

        //检查匹配,成功就弹出
        if (op[i] == ')' || op[i] == ']' || op[i] == '}') {
            test = check(s, top, op[i]);
            if (test == 1) {
                top--;
            } else {
                printf("no
");
                return 0; // 输出结果后直接结束程序
            }
        }
    }

    if (top == -1) {
        printf("yes
");
    } else {
        printf("no
");
    }
    
    return 0;
}
本站无任何商业行为
个人在线分享 » 栈—-7-9 括号匹配
E-->