#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
#define STACK_SIZE 20
#define STRING_SIZE 64
typedef int Status;
typedef struct Stack
{
char string[STACK_SIZE];
int top;
} Stack,*StackPtr;
Status Stack_Init(StackPtr s);
void Stack_Pop(StackPtr s);
void Stack_Push(StackPtr s, char elem);
Status Stack_IsFull(StackPtr s);
Status Stack_IsEmpty(StackPtr s);
int main()
{
StackPtr stack;//先建立一个栈stack;
int i,result = 0;//给结果赋初值0;
char input[STRING_SIZE];//定义一个字符数组并定义最大限度
stack = (StackPtr)malloc(sizeof(Stack));//给予空间
if (Stack_Init(stack))//调用初始化
{
printf("请输入表达式:\n");
gets(input);
for (i = 0; i < STRING_SIZE; i++)//STRING_SIZE计算不超过最大限度
{
if (input[i] == '#')
break;
if (input[i] == '(' || input[i] == '{' || input[i] == '[')//左括号进栈
{
Stack_Push(stack, input[i]);//把左括号的值放到栈里面
++result;//结果加一
}
else if (input[i] == ')' || input[i] == '}' || input[i] == ']')//右括号出栈
{
Stack_Pop(stack);// if (!Stack_IsEmpty(s)) s->string[s->top--] = -1;栈出函数中有进行
--result;
}
}
if (result == 0)
{
printf("所有括号匹配成功!\n");
return 0;
}
printf("有括号未匹配!\n");
return 0;
}
return 0;
}
Status Stack_Init(StackPtr s)//初始化顺序栈
{
s->top = -1;
if (s == NULL)
{
printf("ERROR!!!分配内存失败!\n");
return FALSE;
}
return TRUE;
}
void Stack_Pop(StackPtr s)
{
if (!Stack_IsEmpty(s))
s->string[s->top--] = -1;
else
printf("ERROR!!!栈为空,无法进行出栈操作!\n");
}
void Stack_Push(StackPtr s, char elem)
{
if (!Stack_IsFull(s))
s->string[s->top++] = elem;
else
printf("ERROR!!!栈已满,无法进行入栈操作!\n");
}
Status Stack_IsEmpty(StackPtr s)
{
if (s->top == -1)
return TRUE;
return FALSE;
}
Status Stack_IsFull(StackPtr s)
{
if (s->top == (STRING_SIZE - 1))
return TRUE;
return FALSE;
}
不理解其中如果(]为什么不匹配,代码里哪里是这个意思?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- hmsy39 2021-10-03 21:44关注
这个代码是使用栈结构后进先出的特性,判断一个字符串中的 "()[]{}" 这些括号是否相互匹配
比如
()
和({})
和[{}()]
都是括号匹配的例子,左小括号对应右小括号,比如
(]
就是括号不匹配的例子(左小括号和右中括号不匹配本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 运筹学排序问题中的在线排序
- ¥15 关于#flink#的问题:关于docker部署flink集成hadoop的yarn,请教个问题flink启动yarn-session.sh连不上hadoop
- ¥30 求一段fortran代码用IVF编译运行的结果
- ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
- ¥15 lammps拉伸应力应变曲线分析
- ¥15 C++ 头文件/宏冲突问题解决
- ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
- ¥50 安卓adb backup备份子用户应用数据失败
- ¥20 有人能用聚类分析帮我分析一下文本内容嘛
- ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题