用c语言实现多重括号匹配判断
时间: 2023-12-17 08:02:38 浏览: 71
可以使用栈(Stack)来实现多重括号匹配判断,具体步骤如下:
1. 定义一个栈结构体,包含一个数组和一个指向栈顶的指针。
2. 遍历字符串中的每一个字符,如果是左括号(包括小括号、中括号、大括号等),则将其压入栈中;如果是右括号,则弹出栈顶元素,并判断弹出的左括号是否与该右括号匹配。如果不匹配,则返回 false;如果匹配,则继续遍历字符串。
3. 如果遍历完字符串后栈不为空,则说明有左括号没有右括号与之匹配,返回 false;否则返回 true。
下面是一份示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// 栈结构体
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
// 初始化栈
void initStack(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈操作
void push(Stack *s, char c) {
if (isFull(s)) {
printf("Stack overflow\n");
exit(EXIT_FAILURE);
}
s->data[++(s->top)] = c;
}
// 出栈操作
char pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack underflow\n");
exit(EXIT_FAILURE);
}
return s->data[(s->top)--];
}
// 判断左右括号是否匹配
int isMatch(char left, char right) {
if (left == '(' && right == ')') {
return 1;
} else if (left == '[' && right == ']') {
return 1;
} else if (left == '{' && right == '}') {
return 1;
} else {
return 0;
}
}
// 判断括号是否匹配
int isBalanced(char *str) {
Stack s;
initStack(&s);
int i = 0;
while (str[i]) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
push(&s, str[i]);
} else if (str[i] == ')' || str[i] == ']' || str[i] == '}') {
char left = pop(&s);
if (!isMatch(left, str[i])) {
return 0;
}
}
i++;
}
return isEmpty(&s);
}
int main() {
char str[100];
printf("Please enter a string:\n");
scanf("%s", str);
if (isBalanced(str)) {
printf("The string is balanced.\n");
} else {
printf("The string is not balanced.\n");
}
return 0;
}
```
以上代码实现了一个简单的多重括号匹配判断,可以适用于大部分情况。