用C语言,写一个检查给定字符串中的括号是否匹配,括号类型包括()[]和{}的程序
时间: 2024-10-20 10:04:58 浏览: 36
在C语言中,你可以使用栈数据结构来检查给定字符串中的括号是否匹配。这里有一个简单的示例程序,它会遍历输入的字符串,如果遇到开括号,则将其压入栈;如果遇到闭括号,就尝试从栈顶弹出一个匹配的开括号。如果栈为空或者弹出的是不匹配的括号,那么返回false,否则继续检查直到字符串结束。最后,如果栈为空则意味着所有的括号都已成功配对,返回true。
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool isValid(char* str) {
stack<char> brackets;
const char openBrackets[] = "([{";
const char closeBrackets[] = {')', ']', '}'};
int len = strlen(str);
for (int i = 0; i < len; ++i) {
if (openBrackets[find(openBrackets, str[i])] != '\0') {
brackets.push(str[i]);
} else if (closeBrackets[find(closeBrackets, str[i])] != '\0' && !brackets.empty()) {
if (str[i] == closeBrackets[find(closeBrackets, brackets.top())]) {
brackets.pop();
} else {
return false;
}
} else {
return false;
}
}
return brackets.empty(); // 如果栈为空,说明括号匹配
}
int find(const char arr[], char target) {
for (int i = 0; arr[i] != '\0'; ++i) {
if (arr[i] == target) {
return i;
}
}
return -1;
}
int main() {
char input[] = "({[()]})";
printf("%s 的括号是否匹配? %s\n", input, isValid(input) ? "是" : "否");
char invalid_input[] = "({[()]}}";
printf("%s 的括号是否匹配? %s\n", invalid_input, isValid(invalid_input) ? "是" : "否");
return 0;
}
```
在这个程序中,`find()` 函数用于查找字符在数组中的位置,`isValid()` 函数则负责检查括号的匹配。注意,这个程序假设输入字符串不会包含非法字符,例如嵌套的括号。
阅读全文