1. 括号匹配 【问题描述】一个表达式,判断括号是否匹配 【输入形式】字符串 【输出形式】匹配或不匹配 【样例输入】(2+3)*5+6*(5+2) 【样例输出】是 【样例说明】 【评分标准】 c语言完整代码实现
时间: 2024-10-21 22:14:40 浏览: 33
括号匹配是计算机程序中的一个常见问题,用于检查给定的字符串中左括号(如`(`、`{`、`[`)和右括号(如`)`、`}`、`]`)是否配对。通常会采用栈数据结构来解决这个问题。算法步骤如下:
1. 遍历输入字符串的每个字符,如果遇到左括号,则将其压入栈。
2. 如果遇到右括号,检查栈顶元素是否与其匹配。如果是,则弹出栈顶元素;如果不是,返回“不匹配”。
3. 遍历结束后,栈为空表示所有括号都已配对,返回“匹配”;若栈非空则表示有未关闭的括号,返回“不匹配”。
以下是一个简单的 C 语言代码实现,假设 `isMatch()` 函数用于检查单个括号的匹配:
```c
#include <stdbool.h>
#include <stdio.h>
bool isMatch(char open, char close) {
return open == '(' && close == ')' || // 对于常见的 ()
open == '{' && close == '}' || // 对于 {}
open == '[' && close == ']'; // 对于 []
}
bool isValidString(const char* str) {
stack<char> parentheses;
for (char ch : str) {
if (ch == '(' || ch == '{' || ch == '[') { // 左括号入栈
parentheses.push(ch);
} else if (ch == ')' || ch == '}' || ch == ']') { // 右括号
if (parentheses.empty()) {
return false; // 空栈,提前结束匹配
}
char top = parentheses.top();
parentheses.pop();
if (!isMatch(top, ch)) {
return false; // 匹配失败
}
}
}
return parentheses.empty(); // 如果遍历完还剩括号,就是不匹配
}
int main() {
const char* input = "(2+3)*5+6*(5+2)";
printf("%s\n", isValidString(input) ? "是" : "否");
return 0;
}
```
阅读全文