用c语言写
时间: 2023-08-19 17:04:57 浏览: 91
使用C语言实现
好的,下面是使用 C 语言实现括号匹配的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct {
char data[MAX_SIZE]; // 存储栈中元素
int top; // 栈顶指针
} Stack;
// 初始化栈
void init_stack(Stack* s) {
s->top = -1;
}
// 判断栈是否为空
int is_empty(Stack* s) {
return s->top == -1;
}
// 判断栈是否已满
int is_full(Stack* s) {
return s->top == MAX_SIZE - 1;
}
// 入栈
void push(Stack* s, char c) {
if (is_full(s)) {
printf("Error: stack full\n");
exit(1);
}
s->top++;
s->data[s->top] = c;
}
// 出栈
char pop(Stack* s) {
if (is_empty(s)) {
printf("Error: stack empty\n");
exit(1);
}
char c = s->data[s->top];
s->top--;
return c;
}
// 括号匹配函数
int parentheses_match(char* s) {
Stack stack;
init_stack(&stack);
int len = strlen(s);
for (int i = 0; i < len; i++) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
push(&stack, s[i]); // 如果是左括号,入栈
} else if (s[i] == ')' || s[i] == ']' || s[i] == '}') {
if (is_empty(&stack)) { // 如果栈为空,说明缺少左括号,匹配失败
return 0;
}
char top = pop(&stack); // 弹出栈顶元素
if (top == '(' && s[i] != ')') { // 如果左右括号不匹配,匹配失败
return 0;
} else if (top == '[' && s[i] != ']') {
return 0;
} else if (top == '{' && s[i] != '}') {
return 0;
}
}
}
return is_empty(&stack); // 如果栈为空,说明匹配成功;否则匹配失败
}
int main() {
char s[MAX_SIZE];
printf("请输入包含括号的字符串:");
fgets(s, MAX_SIZE, stdin);
s[strcspn(s, "\n")] = '\0'; // 去掉字符串末尾的换行符
if (parentheses_match(s)) {
printf("括号匹配成功!\n");
} else {
printf("括号匹配失败!\n");
}
return 0;
}
```
使用 C 语言实现括号匹配的思路和 Python 版本类似。这里使用结构体来实现栈,在入栈和出栈时需要注意栈是否已满或为空。在主函数中,使用 `fgets` 函数来获取用户输入的字符串,并使用 `strcspn` 函数去掉字符串末尾的换行符。
阅读全文