你用C语言帮我写一个验证用户输入一串圆括号或花括号,然后指出它们之间的嵌套是否正确的程序,要求利用栈
时间: 2024-04-14 21:26:46 浏览: 20
当然可以!以下是一个使用栈来验证括号嵌套是否正确的C语言程序示例:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
// 栈结构定义
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
// 初始化栈
void initStack(Stack* stack) {
stack->top = -1;
}
// 入栈操作
void push(Stack* stack, char c) {
stack->data[++(stack->top)] = c;
}
// 出栈操作
char pop(Stack* stack) {
return stack->data[(stack->top)--];
}
// 判断括号是否匹配
bool isMatching(char opening, char closing) {
if (opening == '(' && closing == ')')
return true;
else if (opening == '{' && closing == '}')
return true;
else
return false;
}
// 验证括号嵌套是否正确
bool isBalanced(char* exp) {
Stack stack;
initStack(&stack);
int i = 0;
while (exp[i] != '\0') {
if (exp[i] == '(' || exp[i] == '{')
push(&stack, exp[i]);
else if (exp[i] == ')' || exp[i] == '}') {
if (stack.top == -1)
return false; // 出现多余的右括号
else if (!isMatching(pop(&stack), exp[i]))
return false; // 括号不匹配
}
i++;
}
if (stack.top == -1)
return true; // 括号匹配
else
return false; // 出现多余的左括号
}
int main() {
char expression[MAX_SIZE];
printf("请输入一串括号序列:");
fgets(expression, MAX_SIZE, stdin);
if (isBalanced(expression))
printf("括号嵌套正确!");
else
printf("括号嵌套不正确!");
return 0;
}
```
这个程序会要求用户输入一串括号序列,然后利用栈来验证括号嵌套是否正确。如果括号嵌套正确,则输出"括号嵌套正确!",否则输出"括号嵌套不正确!"。
希望这个程序对您有帮助!如果有任何问题,请随时向我提问。