写一个完整的C语言括号匹配算法代码
时间: 2024-10-10 20:13:17 浏览: 79
在C语言中,我们可以使用栈数据结构来编写一个括号匹配算法,如常见的KMP算法或自底向上的递归回溯法。这里给出一个简单的基于栈的递归方法:
```c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 50
char stack[MAX_STACK_SIZE];
int top = -1;
bool isMatch(char open, char close) {
if (open == '(' && close == ')') || open == '{' && close == '}' || open == '[' && close == ']')
return true;
else
return false;
}
bool checkBrackets(char* str) {
int i = 0;
while (str[i]) {
if (str[i] == '(' || str[i] == '{' || str[i] == '[') {
stack[++top] = str[i];
} else if (stack[top] != '\0' && !isMatch(stack[top], str[i])) {
return false;
}
i++;
}
// 如果所有的左括号都有对应的右括号,并且栈为空,则括号匹配
return top == -1 || (stack[top] == '(' && str[i-1] == ')') ||
(stack[top] == '{' && str[i-1] == '}') ||
(stack[top] == '[' && str[i-1] == ']');
}
int main() {
char str[] = "({[()]})";
if (checkBrackets(str)) {
printf("The brackets in the string are correctly matched.\n");
} else {
printf("The brackets in the string are not correctly matched.\n");
}
return 0;
}
```
这个程序首先检查字符串中的每个字符,如果是左括号就压入栈中,如果是右括号则检查栈顶是否是相对应的左括号。如果遇到不匹配的情况,或者遍历结束后栈还有剩余元素,说明括号不匹配。
阅读全文