编辑代码

#include <stdio.h>
#include <stdbool.h>

// 定义栈结构
#define MAX_SIZE 100

typedef struct {
    char items[MAX_SIZE];
    int top;
} Stack;

// 初始化栈
void init(Stack *stack) {
    stack->top = -1;
}

// 判断栈是否为空
bool isEmpty(Stack *stack) {
    return stack->top == -1;
}

// 判断栈是否已满
bool isFull(Stack *stack) {
    return stack->top == MAX_SIZE - 1;
}

// 入栈
void push(Stack *stack, char item) {
    if (isFull(stack)) {
        printf("栈已满,无法入栈。\n");
        return;
    }
    stack->items[++stack->top] = item;
}

// 出栈
char pop(Stack *stack) {
    if (isEmpty(stack)) {
        printf("栈已空,无法出栈。\n");
        return '\0';
    }
    return stack->items[stack->top--];
}

// 括号匹配函数
bool isBracketMatch(char *expression) {
    Stack stack;
    init(&stack);

    int i = 0;
    while (expression[i] != '\0') {
        char c = expression[i];

        if (c == '(' || c == '[' || c == '{') {
            push(&stack, c);
        } else if (c == ')' || c == ']' || c == '}') {
            if (isEmpty(&stack)) {
                return false; // 无法匹配
            } else {
                char top = pop(&stack);
                if ((c == ')' && top != '(') ||
                    (c == ']' && top != '[') ||
                    (c == '}' && top != '{')) {
                    return false; // 括号不匹配
                }
            }
        }

        i++;
    }

    return isEmpty(&stack); // 栈为空则括号匹配成功
}

int main() {
    char expression[MAX_SIZE];

    printf("请输入一个包含括号的表达式:");
    fgets(expression, sizeof(expression), stdin);

    if (isBracketMatch(expression)) {
        printf("括号匹配成功!\n");
    } else {
        printf("括号匹配失败!\n");
    }

    return 0;
}