写一个括号匹配的c语言代码
时间: 2024-11-15 18:32:54 浏览: 3
当然可以。在C语言中,我们可以使用栈数据结构来判断给定的字符串是否包含有效的括号匹配。这里是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 50
typedef struct {
char data[MAX_STACK_SIZE];
int top;
} Stack;
bool is_empty(Stack *s) {
return s->top == -1;
}
void push(Stack *s, char c) {
if (is_empty(s)) {
s->top = 0;
}
s->data[s->top++] = c;
}
char pop(Stack *s) {
if (is_empty(s)) {
return '\0'; // 或者抛出异常
}
return s->data[--s->top];
}
bool has_valid_brackets(char* str) {
Stack brackets;
for (int i = 0; str[i] != '\0'; ++i) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
push(&brackets, str[i]);
} else if (str[i] == ')' && pop(&brackets) != '(' ||
str[i] == ']' && pop(&brackets) != '[' ||
str[i] == '}' && pop(&brackets) != '{') {
return false;
}
}
// 如果还有剩余的括号,表示匹配不完整
return is_empty(&brackets);
}
int main() {
char test[] = "({[()]})";
if (has_valid_brackets(test)) {
printf("The string has valid bracket pairs.\n");
} else {
printf("The string does not have valid bracket pairs.\n");
}
return 0;
}
```
这个程序定义了一个栈结构,并通过`push`, `pop`, 和`is_empty`函数来管理括号。`has_valid_brackets`函数遍历输入字符串,如果遇到开括号就入栈,遇到闭括号就尝试从栈顶弹出对应的开括号。如果没有正确配对,则返回`false`。
阅读全文