关于一个用栈来检查表达式的括号匹不匹配的代码,其中表达式中括号有三种:(),[]和{}

songsong2008 songsong2008 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 200
typedef struct
{
char * base;
char * top;
}stack;

int Init(stack *s)
{s->base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
if(!s->base) return 0;
s->top=s->base;
return 1;
}
void Destroy(stack *s)
{free(s->base);
s->base=NULL;
s->top=NULL;
}
void Push(stack *s,char c)
{
*s->top++=c;
}

int pop(stack *s,char *c)
{if(s->top==s->base) return 0;
*c=*--s->top;
return 1;
}
/*---------------------------------------------------------------*/
int Check(stack *s,char *expr)
{int i;
char c[1];
for(i=0;expr[i]!='\0';i++)
{if(expr[i]=='{'||expr[i]=='['||expr[i]=='(') Push(s,expr[i]);
if(expr[i]=='}'||expr[i]==']'||expr[i]==')')
{
if(pop(s,c)==0) return 0;/*栈空,表达式有错*/
else
{if(expr[i]==')')
{
if(c[0]!='(') return 0;
}
else
if(expr[i]-c[0]!=2) return 0;/*'{'和'}'式'['和']'的ASCII码差2*/
}
}
}
if(s->base!=s->top)
return 0;
return 1;
}
/*-------------------------------------------------------------*/
void main()
{
char expr[100];
stack *s;
printf("input the expression\n");
scanf("%s",expr);
if(!Init(s))//第一句warning
exit(0);
if(Check(s,expr))//第二句warning
printf("right\n");
else
printf("wrong\n");
Destroy(s);//第三句warning
}
-----------------------------
程序运行正确,不过有三个warning(即main中用到s的地方都有一个相同的warning:"possible use "s" before definition")这是什么原因呢?我不是已经在stack *s这一句定义s吗?
...全文

相关推荐

用顺序栈判断表达式中括号是否匹配正确

在编程和计算机科学中,表达式中的括号匹配是一个重要的问题,它涉及到数据结构和算法的应用。本问题来源于《数据结构,算法及应用》一书,作者Zhang Xianchao,具体是P80页的第13题。

zhangjieyi123

JS使用正则表达式获取小括号、中括号及花括号内容的方法示例

`g` 是全局标志,表示匹配所有出现,而不仅仅是第一个。2. **中括号** - `[]` 正则表达式:`/\[(.+?)

weixin_38563552

正则表达式去除中括号(符号)及里面包含的内容

正则表达式是一种强大的文本处理工具,常用于匹配、查找、替换和提取字符串中的特定模式。在本主题中,我们将探讨如何使用正则表达式去除中括号(包括方括号`[`和`]`)以及它们内部包含的内容。

weixin_38530536

正则表达式(括号)、[中括号]、{大括号}的区别小结

"正则表达式中的括号()、中括号[]和大括号{}在不同的场景下具有不同的含义和功能。理解这些基础知识对于掌握正则表达式至关重要。"正则表达式是用于匹配字符串的强大工具,其中的括号、中括号和大括号

weixin_38550459

数据结构判断表达式3种括号匹配

在遍历表达式时,遇到每一个字符,如果它是开启的括号,就将其压入栈;如果遇到关闭的括号,我们就检查栈顶元素是否是对应开启的括号,如果是,则弹出栈顶元素,表示成功匹配;如果不是,或者栈为空,那么表达式就是不正确的

未命名的那块料
评论 4
收藏 已收藏
分享
返回顶部
songsong2008
C语言 70,040 成员 243,237 内容