3、从键盘输入一个表达式,判断括号是否匹配,并输出判断结果。表达式中可以包含有3种不同的括号{}、()、[]。
时间: 2024-04-11 15:26:41 浏览: 13
要判断括号是否匹配,你可以使用堆栈的方式来实现。下面是一个示例的C代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct {
char stack[MAX_SIZE];
int top;
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
void push(Stack *s, char c) {
if (s->top == MAX_SIZE - 1) {
printf("堆栈已满\n");
return;
}
s->stack[++(s->top)] = c;
}
char pop(Stack *s) {
if (s->top == -1) {
printf("堆栈已空\n");
return '\0';
}
return s->stack[(s->top)--];
}
int isMatchingPair(char opening, char closing) {
if (opening == '{' && closing == '}') {
return 1;
} else if (opening == '(' && closing == ')') {
return 1;
} else if (opening == '[' && closing == ']') {
return 1;
}
return 0;
}
int isBalanced(char exp[]) {
Stack s;
initStack(&s);
int length = strlen(exp);
int i;
for (i = 0; i < length; i++) {
if (exp[i] == '{' || exp[i] == '(' || exp[i] == '[') {
push(&s, exp[i]);
} else if (exp[i] == '}' || exp[i] == ')' || exp[i] == ']') {
if (s.top == -1 || !isMatchingPair(pop(&s), exp[i])) {
return 0; // 括号不匹配
}
}
}
if (s.top == -1) {
return 1; // 括号匹配
} else {
return 0; // 括号不匹配
}
}
int main() {
char exp[MAX_SIZE];
printf("请输入一个表达式:");
scanf("%s", exp);
if (isBalanced(exp)) {
printf("括号匹配\n");
} else {
printf("括号不匹配\n");
}
return 0;
}
```
在这段代码中,我们使用了一个结构体 `Stack` 来表示堆栈,并实现了初始化、入栈和出栈的操作。我们还定义了一个函数 `isMatchingPair` 来检查括号是否匹配。接着,在 `isBalanced` 函数中,我们遍历输入的表达式,如果遇到左括号,将其入栈;如果遇到右括号,将其与栈顶的左括号进行匹配。最后,我们检查栈是否为空,以确定括号是否完全匹配。
希望这个例子对你有帮助!如果你还有其他问题,请随时提问。