括号匹配问题用c语言实现
时间: 2024-10-17 15:01:29 浏览: 56
括号匹配问题是一个常见的计算机科学问题,通常用于检查字符串中括号(如'('、')'、'['、']'等)是否配对。用C语言实现可以利用栈数据结构来辅助判断。以下是基本步骤:
1. 定义一个字符数组或字符串,存储输入的序列。
2. 创建一个空栈。
3. 遍历输入序列,对于每个字符:
- 如果遇到开括号('('、'{' 或 '['),将其压入栈中。
- 如果遇到闭括号,检查栈顶元素是否与其成对,如果是,则弹出栈顶元素;如果不是,说明不匹配,返回false。
4. 遍历结束后,如果栈为空,表示所有括号都已成功配对,返回true;否则,返回false,因为还有未配对的括号。
下面是一个简单的C语言函数示例:
```c
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
bool isParenthesesMatched(char* str) {
stack<char> brackets;
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] == '(' || str[i] == '{' || str[i] == '[') {
brackets.push(str[i]);
} else if (str[i] == ')' && !brackets.isEmpty() && str[i] == brackets.top()) {
brackets.pop();
} else if (str[i] == '}' && !brackets.isEmpty() && str[i] == brackets.top() + 1) { // '+1' for { and }
brackets.pop();
} else if (str[i] == ']' && !brackets.isEmpty() && str[i] == brackets.top() + 2) { // '+2' for [ and ]
brackets.pop();
} else {
return false;
}
}
return brackets.isEmpty(); // If the stack is empty after all characters are checked, it's a match
}
// 示例用法
int main() {
char test_str[] = "({[()]})";
if (isParenthesesMatched(test_str)) {
printf("括号匹配。\n");
} else {
printf("括号不匹配。\n");
}
return 0;
}
```
阅读全文