判断表达式中括号是否匹配,使用c语言
时间: 2024-01-01 20:05:46 浏览: 246
可以使用栈来判断表达式中的括号是否匹配。
具体实现步骤如下:
1. 定义一个栈结构,可以使用数组或链表实现。
2. 遍历表达式中的每一个字符,如果是左括号('('、'{'、'['),则将其入栈。
3. 如果是右括号(')'、'}'、']'),则判断栈顶元素是否与其匹配,如果匹配,则将栈顶元素弹出,否则括号不匹配。
4. 最后判断栈是否为空,如果为空,则括号匹配,否则括号不匹配。
代码如下:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_STACK_SIZE 100
char stack[MAX_STACK_SIZE];
int top = -1;
void push(char c) {
if (top >= MAX_STACK_SIZE - 1) {
printf("stack overflow!");
return;
}
stack[++top] = c;
}
char pop() {
if (top < 0) {
printf("stack underflow!");
return '\0';
}
return stack[top--];
}
char peek() {
if (top < 0) {
printf("stack underflow!");
return '\0';
}
return stack[top];
}
bool is_matching(char left, char right) {
if (left == '(' && right == ')') return true;
if (left == '{' && right == '}') return true;
if (left == '[' && right == ']') return true;
return false;
}
bool is_balanced(char* expr) {
int i = 0;
while (expr[i] != '\0') {
if (expr[i] == '(' || expr[i] == '{' || expr[i] == '[') {
push(expr[i]);
}
else if (expr[i] == ')' || expr[i] == '}' || expr[i] == ']') {
if (is_matching(peek(), expr[i])) {
pop();
}
else {
return false;
}
}
i++;
}
return (top == -1);
}
int main() {
char expr[MAX_STACK_SIZE];
printf("Enter an expression: ");
scanf("%s", expr);
if (is_balanced(expr)) {
printf("The expression is balanced.\n");
}
else {
printf("The expression is not balanced.\n");
}
return 0;
}
```
在上面的代码中,我们使用了一个is_matching函数来判断左右括号是否匹配。is_balanced函数用来判断表达式中的括号是否匹配。如果表达式中的括号匹配,则is_balanced函数返回true,否则返回false。
阅读全文