给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。c语言
时间: 2024-10-13 20:17:25 浏览: 38
在 C 语言中,你可以使用栈数据结构来判断给定的字符串是否有效,这个过程通常被称为检查括号平衡。这里是一个简单的算法描述:
1. 创建一个空栈 `stack`。
2. 遍历输入字符串的每个字符:
a. 如果字符是 '(', '{', '[', 分别将它们压入栈中。
b. 如果字符是 ')'、'}' 或 ']', 则需要弹出栈顶元素,并比较:
- 如果是 '(', 判断弹出的是 ')';如果是 '{', 判断弹出的是 '}'; 如果是 '[', 判读弹出的是 ']'
- 如果不匹配(比如左括号类型的字符多于右括号),说明字符串无效,立即返回 false。
c. 如果遍历结束后栈不为空,说明还有未匹配的左括号,也表示字符串无效,返回 false。
3. 如果所有字符都处理完毕并且栈为空,说明括号是平衡的,返回 true。
以下是 C 语言函数的一个简单示例:
```c
#include <stdbool.h>
#include <stdio.h>
bool isValidBrackets(char* brackets) {
stack_t *stack = malloc(sizeof(stack_t));
stack_init(stack);
for (int i = 0; brackets[i] != '\0'; ++i) {
switch (brackets[i]) {
case '(':
case '{':
case '[':
push(stack, brackets[i]);
break;
case ')':
if (!peek(stack) || peek(stack) != '(') return false;
pop(stack);
break;
case '}':
if (!peek(stack) || peek(stack) != '{') return false;
pop(stack);
break;
case ']':
if (!peek(stack) || peek(stack) != '[') return false;
pop(stack);
break;
default:
break;
}
}
return stack_empty(stack);
}
// 示例
void main() {
char brackets[] = "(){}[]";
printf("Is %s valid? %d\n", brackets, isValidBrackets(brackets)); // 输出:Is (){}[] valid? 1 (true)
char invalid[] = "({[})";
printf("Is %s valid? %d\n", invalid, isValidBrackets(invalid)); // 输出:Is ({[}) valid? 0 (false)
}
// 这里假设你已经有了 stack_t 结构体定义、push、pop 和 stack_empty 函数
```
阅读全文