C语言写一算法,对输入的表达式中括号匹配情况检查。匹配的括号需要成对出现,且不嵌套。

任务描述
写一算法,对输入的表达式中括号匹配情况检查。匹配的括号需要成对出现,且不嵌套。

输入
第1行为一个整数t(1≤t≤10),表示接下来有t 个测试数据。 第2行输入被检查的表达式。

输出
括号是否匹配。

输入举例
4
([{}()])
([({}))
[(})({})
([{})]
输出举例
Match!
Not match!
Not match!
Not match!

c

1个回答

// Q714224.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main()
{
    int n;
    char input[200];
    char stack[200];
    scanf("%d", &n);
    int *result = (int *)malloc(sizeof(int) * n);
    for (int i = 0 ; i < n; i++)
    {
        scanf("%s", input);
        int pos = 0;
        for (int j = 0; j < strlen(input) && pos >= 0; j++)
        {
            if (input[j] == '(' || input[j] == '[' || input[j] == '{')
            {
                stack[pos++] = input[j];
            }
            else if ((input[j] == ')' || input[j] == ']' || input[j] == '}') && pos > 0)
            {
                if ((stack[pos - 1] == '(' && input[j] == ')') || 
                    (stack[pos - 1] == '[' && input[j] == ']') ||
                    (stack[pos - 1] == '{' && input[j] == '}'))
                    pos--;
                else
                {
                    pos = -1;
                    break;
                }
            }
            else
            {
                pos = -1;
                break;
            }
        }
        result[i] = (pos == 0);
    }
    for (int i = 0; i < n; i++)
    {
        if (result[i]) printf("Match!\n"); else printf("Not match!\n");
    }
    return 0;
}


图片说明

如果问题得到解决,请点我回答左上角的采纳和向上的箭头,谢谢

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问