C语言写给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。
时间: 2024-10-10 22:06:40 浏览: 25
C语言判断回文字符串代码.rar
5星 · 资源好评率100%
在C语言中,你可以通过栈数据结构来解决这个问题。可以遍历输入字符串`s`,对于每个字符,执行以下操作:
1. 如果遇到开放括号('(', '{', '['),将其压入栈中。
2. 如果遇到关闭括号(')', '}', ']'):
- 如果栈为空,说明没有相应的匹配对,返回false。
- 否则,检查当前关闭括号的类型是否与栈顶元素匹配(例如,'(' 和 ')' 对应,'{' 和 '}' 对应,'[ ]' 对应)。如果不匹配,返回false。
- 匹配后,从栈顶弹出一个元素。
遍历结束后,如果栈为空,那么所有括号都已找到匹配对,字符串有效;否则,存在未匹配的左括号,字符串无效。
以下是一个简单的C函数示例:
```c
#include <stdbool.h>
#include <stdio.h>
bool isValidString(char* s) {
stack<char> brackets;
for (char c : s) {
if (c == '(' || c == '{' || c == '[') { // 开放括号
brackets.push(c);
} else if (c == ')' || c == '}' || c == ']') { // 关闭括号
char top = brackets.top();
brackets.pop();
if (top != c) { // 不匹配
return false;
}
}
}
// 如果遍历结束,且栈为空,则字符串有效
return brackets.empty();
}
int main() {
char str[] = "({[()]})";
if (isValidString(str)) {
printf("Valid string.\n");
} else {
printf("Invalid string.\n");
}
return 0;
}
```
阅读全文