#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;
}