1、从键盘输入一个仅包括(、)、[、]、{、}共6种字符的括号串,使用栈检查其合法性。如:[]{}、[{()}]合法;[]({}、 {[}]非法c语言
时间: 2024-01-11 15:03:11 浏览: 97
以下是使用C语言实现的栈检查括号串合法性的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 100 // 定义栈的最大容量
// 栈的结构体
typedef struct {
char data[MAX_SIZE]; // 存储栈的元素
int top; // 栈顶指针
} Stack;
// 初始化栈
void InitStack(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
bool IsEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
bool IsFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈
bool Push(Stack *s, char x) {
if (IsFull(s)) {
return false;
}
s->data[++s->top] = x;
return true;
}
// 出栈
bool Pop(Stack *s) {
if (IsEmpty(s)) {
return false;
}
s->top--;
return true;
}
// 获取栈顶元素
char GetTop(Stack *s) {
if (IsEmpty(s)) {
return '\0';
}
return s->data[s->top];
}
// 检查括号串合法性
bool CheckBracket(char *str) {
Stack s;
InitStack(&s);
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
Push(&s, str[i]);
} else if (str[i] == ')') {
if (GetTop(&s) != '(') {
return false;
}
Pop(&s);
} else if (str[i] == ']') {
if (GetTop(&s) != '[') {
return false;
}
Pop(&s);
} else if (str[i] == '}') {
if (GetTop(&s) != '{') {
return false;
}
Pop(&s);
}
}
return IsEmpty(&s); // 栈中还有元素,说明括号串不合法
}
int main() {
char str[MAX_SIZE];
printf("请输入一个仅包括(、)、[、]、{、}共6种字符的括号串:");
scanf("%s", str);
if (CheckBracket(str)) {
printf("括号串合法!\n");
} else {
printf("括号串不合法!\n");
}
return 0;
}
```
需要注意的是,以上代码只是简单的实现了栈检查括号串合法性的功能,对于其他的特殊情况(如括号串中还包含其他字符、括号不成对出现等),需要进行相应的处理。
阅读全文