设计一个函数Ismatch(),完成括号匹配的检验,要求从键盘接收字符串,并进行括号匹配检验,若匹配,输出1,不匹配,输出0;c语言
时间: 2024-10-21 13:11:51 浏览: 17
c++括号匹配算法.zip
设计一个名为`Ismatch()`的函数,用于检查括号是否配对,你可以使用栈数据结构来帮助实现这个功能。以下是基本的步骤:
```c
#include <stdio.h>
#include <stdbool.h> // 使用布尔类型便于返回结果
bool IsMatch(char* str) {
stack<char> brackets; // 创建一个字符栈
bool opening[5] = {false}; // 初始化五个开放括号的状态
for (int i = 0; str[i]; i++) {
char ch = str[i];
if (ch == '(' || ch == '{' || ch == '[') { // 遇到左括号
brackets.push(ch);
opening[ch - '(', '{', '['] = true; // 更新对应的开放括号状态
} else if (ch == ')' && opening[0]) { // 遇到右括号
if (str[i - 1] == '(' && brackets.top() == ')') {
brackets.pop();
opening[0] = false;
} else {
return false; // 不匹配
}
} else if (ch == '}' && opening[1]) { // 对应规则适用于其他花括号
if (str[i - 1] == '{' && brackets.top() == '}') {
brackets.pop();
opening[1] = false;
} else {
return false;
}
} else if (ch == ']' && opening[2]) {
if (str[i - 1] == '[' && brackets.top() == ']') {
brackets.pop();
opening[2] = false;
} else {
return false;
}
} else {
continue; // 如果不是括号,则跳过
}
// 检查栈是否为空,如果为空则括号未关闭
if (brackets.empty()) {
return false;
}
}
// 检查栈是否为空,如果为空则所有括号都已关闭
return brackets.empty();
}
int main() {
char input[100];
printf("请输入包含括号的字符串:");
fgets(input, sizeof(input), stdin); // 读取用户输入并去掉行尾换行符
input[strlen(input) - 1] = '\0'; // 去掉多余字符
int result = IsMatch(input);
if (result)
printf("括号匹配,输出 1\n");
else
printf("括号不匹配,输出 0\n");
return 0;
}
```
当你运行这个程序并输入一个包含括号的字符串时,它会检查括号是否有效匹配。如果匹配,它将输出1;如果不匹配,输出0。
阅读全文