简单C语言实现:输入一个算术表达式,其中包含两种括号:圆括号“()”和方括号“[]”,嵌套顺序任意,编写一个算法用于判别表达式中括弧是否能够正确匹配。
时间: 2024-10-14 22:08:10 浏览: 44
在C语言中,我们可以使用递归来解决这个问题。首先,定义一个函数`check_brackets()`,该函数接受一个字符数组作为输入,并检查其内的括号是否正确配对。主要步骤如下:
1. 创建两个指针 `start` 和 `end`,分别指向字符串开始和结束位置。
2. 使用递归,当遇到左括号时,进入一个新的递归层,将当前左括号的位置保存下来,并移动到下一个字符(跳过左括号)。
3. 当遇到右括号时,检查当前位置之前是否有相应的左括号。如果有,且它们是匹配的(即相同的类型),就回溯到上一层递归,继续检查后面的括号;如果没有,或者不匹配,返回false。
4. 最终,如果遍历完整个表达式都没有遇到错误,那么所有括号都已匹配,返回true。
下面是一个简单的C语言实现:
```c
#include <stdbool.h>
bool check_brackets(char *expression) {
int start = 0;
bool (*match)(const char, const char) = [](const char left, const char right) {
return (left == '(' && right == ')') ||
(left == '[' && right == ']') ||
(left == '{' && right == '}');
};
for (int i = 0; expression[i] != '\0'; ++i) {
if (expression[i] == '(' || expression[i] == '[' || expression[i] == '{') {
start = i + 1;
while (start < i + 2 && expression[start] != ')') {
start++;
}
if (start == i + 2) { // unclosed left bracket
return false;
}
start++; // Skip right bracket
} else if (expression[i] == ')' || expression[i] == ']' || expression[i] == '}') {
if (expression[start - 1] != '(' && expression[start - 1] != '[' && expression[start - 1] != '{') {
return false; // Unmatched right bracket
}
if (!match(expression[start - 1], expression[i])) {
return false; // Mismatched types
}
start += 2; // Move past both brackets
}
}
return start == i + 1; // Check if we've reached the end with no unmatched brackets
}
int main() {
char expr[] = "(([]))";
if (check_brackets(expr)) {
printf("The expression has correct bracket pairing.\n");
} else {
printf("The expression has incorrect bracket pairing.\n");
}
return 0;
}
```
阅读全文