设计一个算术表达式中包括圆括号,方括号,花括号,判断其中的括号是否匹配(使用C语言写出源代码)
时间: 2024-10-18 17:23:15 浏览: 47
设计一个C语言函数来检查算术表达式的括号是否匹配,我们可以采用递归回溯的方式来处理。这里是一个简单的例子:
```c
#include <stdbool.h>
#include <stdio.h>
bool is_valid_brackets(char *expression) {
stack_t brackets = {0}; // 使用栈数据结构存储左括号
for (int i = 0; expression[i] != '\0'; i++) {
if (expression[i] == '(' || expression[i] == '[' || expression[i] == '{') {
// 入栈左括号
brackets.data[brackets.top++] = expression[i];
} else if (expression[i] == ')' && brackets.top > 0 && brackets.data[brackets.top - 1] == '(') {
// 匹配正确的右括号,出栈
brackets.top--;
} else if (expression[i] == ']' && brackets.top > 0 && brackets.data[brackets.top - 1] == '[') {
brackets.top--;
} else if (expression[i] == '}' && brackets.top > 0 && brackets.data[brackets.top - 1] == '{') {
brackets.top--;
} else {
// 非括号字符,直接忽略
continue;
}
// 如果所有括号都已匹配完,但栈未清空,则表示有未匹配的括号
if (brackets.top == 0)
return false;
}
// 检查栈是否为空,若为空则括号匹配
return brackets.top == 0;
}
// 测试函数
int main() {
char expressions[] = {"((()))", "([{}])", "({})", ")(", "[)]", "({)}{[()]}", "(()"};
for (size_t i = 0; i < sizeof(expressions) / sizeof(expressions[0]); i++) {
bool result = is_valid_brackets(expressions[i]);
printf("%s 的括号匹配吗? %s\n", expressions[i], result ? "是" : "否");
}
return 0;
}
```
这个程序会遍历输入的字符串,每当遇到左括号就入栈,遇到右括号就尝试匹配并出栈。如果最终栈为空,说明所有括号都已正确匹配;如果有剩余的括号在栈里,那么表示括号不匹配。
阅读全文