#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关注
这个代码是使用栈结构后进先出的特性,判断一个字符串中的 "()[]{}" 这些括号是否相互匹配
比如
()
和({})
和[{}()]
都是括号匹配的例子,左小括号对应右小括号,比如
(]
就是括号不匹配的例子(左小括号和右中括号不匹配本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 数学建模,尽量用matlab回答,论文格式
- ¥15 昨天挂载了一下u盘,然后拔了
- ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
- ¥20 易康econgnition精度验证
- ¥15 msix packaging tool打包问题
- ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
- ¥15 python的qt5界面
- ¥15 无线电能传输系统MATLAB仿真问题
- ¥50 如何用脚本实现输入法的热键设置
- ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能