用C语言写一段输入一串括号包含以下括号种类:(、)、[、]、{、}。试利用顺序栈检查输入括号序列的匹配情况;
时间: 2023-06-08 11:03:50 浏览: 217
好的,这是一个关于编程的问题,我可以回答。以下是用C语言实现检查括号序列匹配的代码:
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义栈的最大容量
typedef struct {
char stk[MAXSIZE]; // 栈的数组
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 == MAXSIZE - 1;
}
// 入栈操作
void push(Stack *s, char data) {
if (isFull(s)) {
printf("Stack is full!\n");
exit(1);
}
s->stk[++s->top] = data;
}
// 出栈操作
char pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty!\n");
exit(1);
}
return s->stk[s->top--];
}
// 检查括号序列是否匹配
int checkMatch(char str[]) {
Stack s;
initStack(&s); // 初始化栈
int i = 0;
while (str[i] != '\0') {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
push(&s, str[i]); // 将左括号入栈
} else if (str[i] == ')' || str[i] == ']' || str[i] == '}') {
if (isEmpty(&s)) {
return 0; // 栈为空,直接返回0
}
char c = pop(&s); // 弹出栈顶元素
if ((str[i] == ')' && c != '(') || (str[i] == ']' && c != '[') || (str[i] == '}' && c != '{')) {
return 0; // 右括号与栈顶元素不匹配,返回0
}
}
i++;
}
return isEmpty(&s); // 栈为空,表示括号序列匹配,返回1,否则返回0
}
// 测试
int main() {
char str[MAXSIZE];
printf("请输入一个包含括号的字符串:");
scanf("%s", str);
if (checkMatch(str)) {
printf("括号序列匹配!\n");
} else {
printf("括号序列不匹配!\n");
}
return 0;
}
```
希望能够帮到您!
阅读全文