用栈判断表达式中的括号是否匹配,请给出一个可运行的代码c语言
时间: 2023-06-03 19:07:38 浏览: 110
用栈判断括号是否匹配
好的,以下是C语言代码:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
char stack[MAX_SIZE];
int top = -1;
void push(char c) {
if (top >= MAX_SIZE - 1)
printf("Error: Stack Overflow\n");
else
stack[++top] = c;
}
char pop() {
if (top < 0) {
printf("Error: Stack Underflow\n");
return '\0';
} else {
char c = stack[top];
top--;
return c;
}
}
bool isMatchingPair(char c1, char c2) {
if (c1 == '(' && c2 == ')')
return true;
else if (c1 == '{' && c2 == '}')
return true;
else if (c1 == '[' && c2 == ']')
return true;
else
return false;
}
bool isBalanced(char exp[]) {
for (int i = 0; exp[i] != '\0'; i++) {
if (exp[i] == '(' || exp[i] == '{' || exp[i] == '[')
push(exp[i]);
else if (exp[i] == ')' || exp[i] == '}' || exp[i] == ']') {
if (top == -1 || !isMatchingPair(stack[top], exp[i]))
return false;
else
pop();
}
}
return (top == -1);
}
int main() {
char expression[MAX_SIZE];
printf("Enter an expression: ");
scanf("%s", expression);
if (isBalanced(expression))
printf("The expression is balanced.\n");
else
printf("The expression is not balanced.\n");
return 0;
}
```
这段代码可以用栈来判断表达式中的括号是否匹配,如果匹配则输出“表达式是平衡的”,否则输出“表达式不是平衡的”。如果表达式中有其他类型的括号,可以在 `isMatchingPair` 函数中添加。
阅读全文