编写一个c程序,给定一个只包含括号(、)、{、}、[和]的字符串s,请判断字符串中的括号是否匹配(使用栈stack)
时间: 2024-11-15 14:20:37 浏览: 38
编写一个C程序来检查括号是否匹配,可以使用栈数据结构。下面是一个简单的步骤和伪代码描述:
1. 定义一个栈`char stack[]`用于存储左括号。
2. 创建一个辅助函数`is_valid_bracket(char bracket)`,检查输入的括号是否是有效的打开或关闭括号。
3. 遍历输入的字符串`s`,对于每个字符做如下操作:
a. 如果是左括号('(', '[', '{'),将其压入栈中。
b. 如果是右括号(')', ']', '}'):
i. 如果栈为空,则说明当前括号没有对应的开启括号,返回false。
ii. 否则,弹出栈顶元素,如果它们是一对匹配的括号(例如,'('对应 ')' 或者 '[' 对应 ']'),继续遍历;否则,返回false。
4. 遍历结束后,如果栈为空,表示所有括号都已正确配对,返回true;否则,返回false。
```c
#include <stdio.h>
#include <stdbool.h>
bool is_valid_bracket(char bracket) {
switch(bracket) {
case '(':
case '[':
case '{':
return true;
case ')':
return top(stack) == '(';
case ']':
return top(stack) == '[';
case '}':
return top(stack) == '{';
default:
return false;
}
}
// 检查栈是否为空并获取栈顶元素
int top(char stack[]) {
if (stack == NULL || top_index >= stack_depth)
return -1; // 表示栈空
else
return stack[top_index];
}
void push(char stack[], char item) {
// ... 实现将元素入栈的逻辑
}
bool is_balanced_parens(char s[]) {
int stack_depth = 0;
char stack[100]; // 可调整大小以适应更长的字符串
for (int i = 0; s[i] != '\0'; ++i) {
if (is_valid_bracket(s[i])) {
push(stack, s[i]);
} else {
if (top(stack) == -1 || !is_valid_bracket(s[i], top(stack))) {
return false;
} else {
pop(stack);
}
}
}
return stack_depth == 0; // 如果栈空,说明括号匹配
}
int main() {
char s[] = "({[()]})";
bool result = is_balanced_parens(s);
printf("%s has balanced parentheses? %s\n", s, result ? "Yes" : "No");
return 0;
}
```
阅读全文