c语言完美括号匹配
时间: 2023-08-24 19:16:05 浏览: 43
实现一个 C 语言程序,判断给定的字符串中括号是否匹配。
具体思路:
1. 定义一个栈,用来存放左括号。
2. 遍历字符串,如果是左括号,则将其入栈,否则判断栈顶元素是否为与之匹配的左括号,如果匹配则将栈顶元素出栈,否则返回匹配失败。
3. 遍历完字符串后,判断栈是否为空,如果为空则匹配成功,否则匹配失败。
以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.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 is full!\n");
exit(1);
}
s->data[++(s->top)] = c;
}
char pop(Stack* s) {
if (isEmpty(s)) {
printf("Stack is empty!\n");
exit(1);
}
return s->data[(s->top)--];
}
int isMatch(char left, char right) {
if (left == '(' && right == ')') {
return 1;
}
if (left == '[' && right == ']') {
return 1;
}
if (left == '{' && right == '}') {
return 1;
}
return 0;
}
int isBalanced(char* str) {
Stack s;
initStack(&s);
int len = strlen(str);
for (int i = 0; i < len; i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
push(&s, str[i]);
}
if (str[i] == ')' || str[i] == ']' || str[i] == '}') {
if (isEmpty(&s) || !isMatch(pop(&s), str[i])) {
return 0;
}
}
}
return isEmpty(&s);
}
int main() {
char str[MAX_SIZE];
printf("Please input a string: ");
scanf("%s", str);
if (isBalanced(str)) {
printf("The string is balanced!\n");
}
else {
printf("The string is not balanced!\n");
}
return 0;
}
```
上述代码中,我们定义了一个栈以及一些常用的栈操作函数。其中 `isMatch` 函数用来判断左右括号是否匹配。在 `isBalanced` 函数中,我们遍历字符串,如果遇到左括号则入栈,如果遇到右括号则判断栈顶元素是否为与之匹配的左括号。最后判断栈是否为空即可。
在主函数中,我们输入一个字符串并调用 `isBalanced` 函数进行括号匹配判断。