1、从键盘输入一个仅包括(、) 、[、]、{、}共 6 种字符的括号串,使用栈检查其合法性。如:[ ] { }、[ { ( ) } ] 合法;[ ] ( { }、 { [ } ] 非法。c语言栈实现
时间: 2024-12-13 12:26:39 浏览: 12
在C语言中,我们可以使用栈来检查一个括号串是否合法。括号主要有四种类型:圆括号 '(', ')',方括号 '[' 和 ']', 大括号 '{' 和 '}。为了判断它们是否匹配,我们需要遍历这个字符串,并遵循以下规则:
1. 创建一个空的栈(通常称为 "openStack"),用于存储左括号。
2. 遇到左括号时,将其压入栈中。
3. 遇到右括号时,检查栈顶元素是否是对应的左括号。如果是,则将栈顶的左括号弹出;如果不是,说明当前字符串不合法,返回false。
4. 如果遍历完整个字符串,栈为空或者只剩下一个非空的右括号在栈顶,那么字符串也是合法的,因为最后一个右括号没有找到对应的左括号。
以下是C语言的一个简单示例代码片段:
```c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
bool isValid(char str[]) {
stack<char> openStack;
int i = 0;
while (str[i]) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
openStack.push(str[i]);
}
else if (str[i] == ')' && !openStack.empty() && openStack.top() == '(') {
openStack.pop();
}
else if (str[i] == ']' && !openStack.empty() && openStack.top() == '[') {
openStack.pop();
}
else if (str[i] == '}' && !openStack.empty() && openStack.top() == '{') {
openStack.pop();
}
else {
return false; // 不匹配的右括号,立即返回错误
}
i++;
}
// 检查是否有未配对的左括号
return openStack.empty();
}
int main() {
char test[] = "[ ] { }";
char invalid[] = "[ ] ( { }";
printf("'%s' is %sthis a valid string.\n", test, isValid(test) ? "" : "not ");
printf("'%s' is %sthis a valid string.\n", invalid, isValid(invalid) ? "" : "not ");
return 0;
}
```
在这个程序中,`isValid` 函数会根据上述逻辑检查输入的括号串,并返回相应的结果。运行 `main` 中的例子可以看到哪些字符串是合法的,哪些是非法的。
阅读全文