、假设一个算术表达式中包含圆括号、方括号、花括号这三种类型的括号,编写-个算法判断表达式中的括号是否配对。 函数原型如下: int bracketMatch(char *str); //字符串用一维字符数组和一-级字符指针实现
时间: 2024-05-05 15:15:59 浏览: 85
思路:
1. 遍历字符串,遇到左括号就将其入栈;
2. 遇到右括号,就从栈中弹出一个左括号,判断是否匹配;
3. 若匹配,则继续遍历;若不匹配,则说明括号不配对,返回0;
4. 遍历完字符串后,若栈为空,则说明所有括号都配对,返回1;否则返回0。
代码实现:
```c
#include <stdio.h>
#define MAX_SIZE 100
int bracketMatch(char *str) {
char stack[MAX_SIZE]; // 定义栈
int top = -1; // 栈顶指针初始化为-1
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') { // 遇到左括号入栈
stack[++top] = str[i];
} else if (str[i] == ')' || str[i] == ']' || str[i] == '}') { // 遇到右括号出栈
if (top == -1) { // 栈为空时,说明括号不配对
return 0;
} else if ((str[i] == ')' && stack[top] == '(') || (str[i] == ']' && stack[top] == '[') || (str[i] == '}' && stack[top] == '{')) { // 括号匹配
top--;
} else { // 括号不匹配
return 0;
}
}
}
if (top == -1) { // 栈为空,说明所有括号都配对
return 1;
} else { // 栈不为空,说明括号不配对
return 0;
}
}
int main() {
char str[] = "{[(a+b)*(c-d)]/2}";
int result = bracketMatch(str);
if (result) {
printf("括号配对\n");
} else {
printf("括号不配对\n");
}
return 0;
}
```
阅读全文