请给我一个详细的代码
时间: 2024-10-12 18:05:46 浏览: 28
当然,这里是一个使用C语言实现的简单例子,用于判断括号字符串的匹配情况。我们将使用栈来辅助判断:
```c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// 定义一个字符类型栈
typedef struct Stack {
char* elements;
int top;
int size;
} Stack;
// 初始化栈
Stack* createStack(int size) {
Stack* stack = (Stack*)malloc(sizeof(Stack));
stack->elements = (char*)malloc(size * sizeof(char));
stack->top = -1;
stack->size = size;
return stack;
}
// 入栈操作
void push(Stack* stack, char c) {
if (stack->top + 1 < stack->size) {
stack->elements[++stack->top] = c;
} else {
printf("Stack overflow.\n");
}
}
// 出栈操作
char pop(Stack* stack) {
if (stack->top >= 0) {
return stack->elements[stack->top--];
} else {
printf("Stack underflow.\n");
return '\0';
}
}
// 判断括号是否匹配
bool areParenthesesBalanced(char* str) {
Stack* brackets = createStack(50); // 假设最多有50对括号
bool openBrackets[5] = {false, true, true, true, true}; // 左括号对应的打开状态
for (int i = 0; str[i]; ++i) {
if (openBrackets[str[i] - '0']) { // 大括号({})的开放状态是1, 小括号(())的开放状态是0
push(brackets, str[i]);
} else {
if (pop(brackets) != str[i]) { // 如果右括号与栈顶左括号不匹配,返回false
free(brackets->elements);
free(brackets);
return false;
}
}
}
return stack->top == -1; // 返回栈是否已清空
}
int main() {
char input[] = "(({}))";
if (areParenthesesBalanced(input)) {
printf("The parentheses in '%s' are balanced.\n", input);
} else {
printf("The parentheses in '%s' are not balanced.\n", input);
}
return 0;
}
```
这个代码首先定义了一个字符栈,并实现了创建、入栈和出栈的操作。`areParenthesesBalanced`函数通过遍历字符串,将左括号入栈,遇到右括号时检查栈顶是否为其对应匹配的左括号,如果不匹配则返回false。最后,如果栈为空,则说明所有的括号都匹配了。
阅读全文