用C语言写一个程序,判断一个可能含有花括号、中括号、和圆括号的表达式中各类括号是否匹配,若匹配,则返回1;否则返回0。表中表达式只包含三种括号,花括号{}、中括号[]、圆括号(),即它仅由 (、)、[、]、{、}六个字符组成。
时间: 2023-05-21 17:06:07 浏览: 92
好的,这个问题可以用栈来解决。我们可以遍历表达式中的每一个字符,如果是左括号就把它压入栈中,如果是右括号则弹出栈顶的左括号并判断是否与当前右括号匹配,如果不匹配返回0,如果栈为空则说明没有左括号与之匹配,也返回0。最后,如果栈为空则返回1,否则返回0。以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Stack {
int top;
char* data;
} Stack;
void stack_init(Stack* s, int len) {
s->top = -1;
s->data = (char*)malloc(sizeof(char) * len);
}
void stack_push(Stack* s, char c) {
s->data[++s->top] = c;
}
char stack_pop(Stack* s) {
return s->data[s->top--];
}
int stack_empty(Stack* s) {
return s->top == -1;
}
int check_parentheses(char* expr) {
Stack s;
stack_init(&s, strlen(expr));
int i;
for (i = 0; i < strlen(expr); i++) {
char c = expr[i];
if (c == '(' || c == '[' || c == '{') {
stack_push(&s, c);
} else if (c == ')') {
if (stack_empty(&s) || stack_pop(&s) != '(') {
return 0;
}
} else if (c == ']') {
if (stack_empty(&s) || stack_pop(&s) != '[') {
return 0;
}
} else if (c == '}') {
if (stack_empty(&s) || stack_pop(&s) != '{') {
return 0;
}
}
}
return stack_empty(&s);
}
int main() {
char expr[] = "[({})]";
int result = check_parentheses(expr);
printf("%d\n", result);
return 0;
}
```
上述代码中,check_parentheses函数用于判断表达式中的括号是否匹配,其余代码用于栈的实现。我们可以将表达式传入check_parentheses函数,它将返回1或0,表示表达式中的括号是否匹配。
阅读全文