C语言给定一个字符串,里边可能包含“()”、"{}"、“[]”三种括号,请编写程序检查该字符串的括号是否成对出现。 并输出如下结果 : true:代表括号成对出现并且嵌套正确,或字符串无括号字符。 false:未正确使用括号字符。
时间: 2024-10-09 20:11:01 浏览: 33
在C语言中,检查字符串中的括号是否成对出现并考虑嵌套可以使用栈数据结构。这里是一个简单的思路:
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool isValidString(const char* str) {
stack<char> brackets;
const char pairs[] = "({[})";
int len = strlen(str);
for (int i = 0; i < len; ++i) {
if (str[i] == '(' || str[i] == '{' || str[i] == '[') {
brackets.push(str[i]);
} else if (str[i] == ')' && !brackets.empty() && pairs[brackets.top()] == '(') {
brackets.pop();
} else if (str[i] == '}' && !brackets.empty() && pairs[brackets.top()] == '{') {
brackets.pop();
} else if (str[i] == ']' && !brackets.empty() && pairs[brackets.top()] == '[') {
brackets.pop();
} else {
// 如果遇到关闭括号但栈为空或者当前打开的括号不是它的对应匹配,返回false
return false;
}
}
// 检查栈是否为空,如果为空则表示所有的括号都已正确配对
return brackets.empty();
}
int main() {
const char* test_cases[] = {"()", "[]{}", "{}[]}", "{()()}([])}", "({[})"};
const size_t tests_count = sizeof(test_cases) / sizeof(test_cases[0]);
for (size_t i = 0; i < tests_count; ++i) {
bool result = isValidString(test_cases[i]);
printf("%s: %st\n", test_cases[i], result ? "true" : "false");
}
return 0;
}
```
这个程序首先创建一个空栈,遍历输入字符串。如果遇到开放括号,就将其压入栈中;如果遇到关闭括号,检查栈顶元素是否与其匹配,匹配则弹出栈顶元素,如果不匹配则返回`false`。最后,如果没有剩余的括号在栈中,说明所有括号都是成对且正确的。
阅读全文