c语言括号匹配
时间: 2023-07-09 14:21:44 浏览: 89
括号匹配是一种常见的语法检查问题,可以使用堆栈(Stack)数据结构来实现。
具体实现步骤如下:
1. 定义一个堆栈(Stack)数据结构,用来存储左括号。
2. 从左到右遍历字符串中的每个字符,如果遇到左括号,则将其入栈。
3. 如果遇到右括号,判断堆栈是否为空,如果为空,则表明右括号没有匹配的左括号,返回错误。
4. 如果堆栈不为空,则将栈顶元素出栈,判断出栈的左括号是否与当前的右括号匹配,如果不匹配,则返回错误。
5. 遍历完字符串后,如果堆栈中仍有左括号未被匹配,则返回错误。
6. 如果字符串中所有括号都匹配成功,则返回正确。
示例代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
typedef struct {
char *base; // 栈底指针
char *top; // 栈顶指针
int stack_size; // 栈可用的最大容量
} Stack;
void InitStack(Stack *S) {
S->base = (char *) malloc(STACK_INIT_SIZE * sizeof(char));
if (!S->base) {
exit(0); // 分配内存失败,直接退出程序
}
S->top = S->base;
S->stack_size = STACK_INIT_SIZE;
}
void Push(Stack *S, char c) {
if (S->top - S->base >= S->stack_size) {
S->base = (char *) realloc(S->base, (S->stack_size + STACK_INCREMENT) * sizeof(char));
if (!S->base) {
exit(0); // 分配内存失败,直接退出程序
}
S->top = S->base + S->stack_size;
S->stack_size += STACK_INCREMENT;
}
*(S->top) = c;
S->top++;
}
char Pop(Stack *S) {
if (S->top == S->base) {
exit(0); // 栈为空,直接退出程序
}
S->top--;
return *(S->top);
}
int IsEmpty(Stack *S) {
return S->top == S->base;
}
int IsMatch(char left, char right) {
if (left == '(' && right == ')') {
return 1;
}
if (left == '[' && right == ']') {
return 1;
}
if (left == '{' && right == '}') {
return 1;
}
return 0;
}
int CheckBrackets(char *str) {
Stack S;
InitStack(&S);
int len = strlen(str);
int i;
for (i = 0; i < len; i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
Push(&S, str[i]);
} else if (str[i] == ')' || str[i] == ']' || str[i] == '}') {
if (IsEmpty(&S)) {
return 0;
}
char left = Pop(&S);
if (!IsMatch(left, str[i])) {
return 0;
}
}
}
if (!IsEmpty(&S)) {
return 0;
}
return 1;
}
int main() {
char str[100];
printf("请输入字符串:");
scanf("%s", str);
if (CheckBrackets(str)) {
printf("括号匹配成功!\n");
} else {
printf("括号匹配失败!\n");
}
return 0;
}
```
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231044901.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)