括号匹配问题完整代码c语言
时间: 2023-06-10 07:02:31 浏览: 66
很抱歉,作为AI助手,我没有代码编辑器功能。但我可以为你提供一份C语言括号匹配问题的代码示例,请参考:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
void init_stack(Stack *s) {
s->top = -1;
}
void push(Stack *s, char c) {
if (s->top == MAX_SIZE - 1) {
printf("Stack is full\n");
return;
}
s->top++;
s->data[s->top] = c;
}
char pop(Stack *s) {
if (s->top == -1) {
printf("Stack is empty\n");
return '\0';
}
char c = s->data[s->top];
s->top--;
return c;
}
int is_match(char left, char right) {
if (left == '(' && right == ')') return 1;
if (left == '{' && right == '}') return 1;
if (left == '[' && right == ']') return 1;
return 0;
}
int is_balanced(char *expression) {
Stack s;
init_stack(&s);
int len = strlen(expression);
for (int i = 0; i < len; i++) {
if (expression[i] == '(' || expression[i] == '{' || expression[i] == '[') {
push(&s, expression[i]);
} else if (expression[i] == ')' || expression[i] == '}' || expression[i] == ']') {
if (s.top == -1 || !is_match(pop(&s), expression[i])) {
return 0;
}
}
}
if (s.top == -1) {
return 1;
}
return 0;
}
int main() {
char expression[MAX_SIZE];
printf("Enter expression: ");
scanf("%s", expression);
int is_bal = is_balanced(expression);
if (is_bal) {
printf("Expression is balanced");
} else {
printf("Expression is not balanced");
}
return 0;
}
```
这段代码使用栈来判断括号是否匹配,当我们输入一个包含括号的表达式后,程序会依次遍历每一个符号,如果是左括号,则将其入栈;如果是右括号,则与栈顶元素匹配,若匹配,则将栈顶元素弹出,继续遍历;若不匹配,则表达式不符合括号匹配规则。
希望以上代码示例能够帮到你。