用C语言编写一个程序 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效
时间: 2024-09-19 18:02:18 浏览: 36
在C语言中,你可以使用栈数据结构来编写一个程序,用于检查给定的括号字符串是否有效。这里是一个简单的算法步骤:
1. 定义两个栈,一个用于存储左括号('(', '{', '['),另一个用于存储右括号(')', '}', ']')。
2. 遍历输入的字符串,对于每个字符:
- 如果它是左括号,压入第一个栈。
- 如果它是右括号,尝试从第二个栈弹出一个左括号。如果栈为空或者当前右括号与栈顶左括号不匹配(例如,')' 和 '(' 不匹配),说明字符串无效。
3. 遍历结束后,如果第一个栈非空,意味着还有未配对的左括号,字符串也是无效的;否则,字符串有效。
下面是一个简单的C语言函数实现这个功能:
```c
#include <stdbool.h>
#include <stdio.h>
bool isValidString(char str[]) {
stack<char> leftStack;
stack<char> rightStack;
for (int i = 0; str[i] != '\0'; ++i) {
if (str[i] == '(' || str[i] == '{' || str[i] == '[') {
leftStack.push(str[i]);
} else {
if (leftStack.empty() || str[i] != ')' && str[i] != '}' && str[i] != ']') {
return false;
}
char topLeft = leftStack.top();
leftStack.pop();
if (!leftStack.empty() && ((topLeft == '(' && str[i] == ')') ||
(topLeft == '{' && str[i] == '}') ||
(topLeft == '[' && str[i] == ']'))) {
continue;
} else {
return false;
}
}
}
return leftStack.empty(); // 返回是否所有的左括号都有对应的右括号
}
int main() {
char test[] = "({[()]})";
printf("%s is valid: %d\n", test, isValidString(test));
return 0;
}
阅读全文