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

songsong2008 2004-11-15 07:11:23
#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吗?
...全文
429 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlackEagle_ 2004-11-15
  • 打赏
  • 举报
回复
在stack *s;后面加一句:
s = null;
kobefly 2004-11-15
  • 打赏
  • 举报
回复
严奶奶数据结构书上的啊
有部分伪代码
sharkhuang 2004-11-15
  • 打赏
  • 举报
回复
压栈匹配扩府经典算法哈
liujingfu123 2004-11-15
  • 打赏
  • 举报
回复
在main()中,你的s 是一个指针,你只是声明了,但没分配空间给它(没初始化),而是调用函数给它初始化的。
内容概要:本文介绍了基于IEEE 14节点标准模型构建的复合微电网仿真系统,该系统集成了柴油发电机、光伏发电、电池储能以及电弧炉等非线性负载,通过Simulink平台实现建模与仿真,深入研究微电网在多种能源协同运行下的动态特性与控制策略。研究涵盖一次调频、储能参与调频的容量配置、非线性负载对系统稳定性的影响等关键技术问题,重点分析了储能系统在频率调节中的技术经济模型与优化配置方法,并结合Matlab代码实现了相关控制策略与经济调度算法的仿真验证,旨在为微电网的能量管理、稳定性分析、优化调度及工程应用提供全面的技术支撑与仿真基础。; 适合人群:电气工程、能源系统、自动化及相关专业的高校研究生、科研人员及从事微电网系统设计、仿真与优化的工程技术人员。; 使用场景及目标:①用于教学与科研中对微电网多源协同控制策略的验证;②支撑含高比例可再生能源和非线性负载的微电网动态行为分析;③为储能系统在频率调节中的应用提供容量配置与经济性评估方法;④作为复杂微电网系统优化调度、稳定性研究及二次控制算法开发的仿真平台。; 阅读建议:读者应具备电力系统分析、自动控制理论及Simulink/Matlab仿真的基础知识,建议结合文中提供的Matlab/Simulink代码实例进行实践操作,重点关注系统建模细节、控制参数整定与优化算法实现,并可进一步拓展至智能优化算法(如粒子群、遗传算法)在微电网调度中的集成应用研究。
内容概要:本文档是一份关于某小区建筑供配电系统设计的CAD软件学习参考资料,配套有完整的学术论文和超过20张详细的CAD设计图纸。资源聚焦于住宅小区供配电系统的工程设计全过程,涵盖电力负荷计算、变配电所布置、低压配电系统设计、线路敷设方式、设备选型、电气安全及节能措施等内容,并结合国家相关电气设计规范,系统阐述了建筑电气供配电系统的设计原则与实施方法。通过CAD图纸的直观展示,帮助读者掌握配电柜系统图、照明与插座平面图、动力干线布置图、弱电系统图等关键图纸的绘制标准与表达技巧,强化理论与工程实践的结合。; 适合人群:具备一定电气工程基础知识和AutoCAD操作技能的高等院校电气工程及其自动化、建筑电气与智能化等相关专业的高年级本科生、研究生,以及从事民用建筑电气设计的初级设计人员和工程技术人员。; 使用场景及目标:① 学习并掌握住宅类建筑供配电系统的设计流程和技术要点;② 熟悉CAD在建筑电气施工图绘制中的标准化应用;③ 为毕业设计、实际工程项目提供参考模板,或用于投标文件的技术方案编制;④ 提升对建筑电气系统整体架构的理解与图纸表达能力。; 阅读建议:建议将配套论文与CAD图纸交叉研读,先理解设计依据、负荷计算方法和设备选型逻辑,再结合图纸学习图层管理、标注规范、符号使用等绘图细节,鼓励动手模仿绘图以巩固技能,提升工程制图的专业性与规范性。
下载代码方式:https://pan.quark.cn/s/bfc47426babe 在本研究中,“Python-该项目是基于医疗领域知识图谱的问答系统”,我们将深入研究如何建立一个专门针对医疗行业的知识图谱,以及在此基础上如何规划并执行一个自动化的问答平台。此项目所涵盖的核心技术主要有Python编程语言、自然语言处理(NLP)以及知识图谱的构建与运用。知识图谱是一种结构化的数据展示方法,它将实体(例如疾病、药品、症状等)及其相互间的联系以图形化的方式呈现出来,有助于我们更加深入地理解和探索繁杂的信息。在医疗行业,知识图谱能够辅助医生和患者迅速获取精确的医学信息,从而提升诊断和治疗的成效。建立此类知识图谱通常包含以下几个阶段:1. 数据采集:从广泛的医学文献、数据库(例如UMLS、SNOMED CT、MeSH等)以及网络资源中汇集医学知识。2. 数据处理:对数据进行清理和标准化,消除错误信息,并统一数据格式。3. 实体检测与关联提取:借助NLP技术,如词性标注、命名实体识别(NER)和依存句法分析,来识别实体及其相互关系。4. 图谱建立:将提取出的实体和关联转化为图谱形态,可以使用图数据库(例如Neo4j或JanusGraph)进行存储。在此基础上,我们需要开发一个问答系统。该问答系统的目的在于解析用户提出的问题,检索相关知识,并输出准确的答案。这涉及到以下主要构成部分:1. 问题解析:利用NLP技术分析问题,识别关键词和实体,明确其查询意图。2. 查询创建:依据问题解析的结果,构建适合查询知识图谱的SQL语句或SPARQL查询。3. 知识查询:执行查询操作,从知识图谱中获取相关数据。4. 答案形成:对检索到的数据加以整合,可能需要进行逻辑推理,最终生成简明...

70,039

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧