表达式括号匹配问题,这样写代码有什么问题吗,为什么在系统上运行错误了
题目来源及自己的思路
题目:表达式括号匹配
我的思路:在栈中判断是不是{}[]()中的一个,是的话压入栈,然后判断是否与上一个匹配,是的话弹栈。最后依据栈的指针是否为-1来判断表达式括号匹配的结果
相关代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct seqstack{
char s[100];
int top;
}seqstack,*pseqstack;
pseqstack create()
{
pseqstack head;
head=(pseqstack)malloc(sizeof(seqstack));
if(head==NULL) printf("Out space!!\n");
else head->top=-1;
return head;
}
pseqstack push(pseqstack la,char c)
{
if(la->top>=99) printf("overflow!\n");
else{
la->s[(la->top)+1]=c;
la->top++;
}
return la;
}
int ifpop(pseqstack la)
{
if(la->s[la->top]==')'&&la->s[(la->top)-1]=='('){
return 1;
}
else if(la->s[la->top]==']'&&la->s[(la->top)-1]=='['){
return 1;
}
else if(la->s[la->top]=='}'&&la->s[(la->top)-1]=='{'){
return 1;
}
else return 0;
}
int main()
{
pseqstack la;
la=create();
char c[100];
int i=0,k=0; //k作为出栈的前提条件
scanf("%s",c);
for(int i = 0;i < strlen(c);i++){
if(c[i] == '('||c[i] == ')'||c[i] == '['||c[i] == ']'||c[i] == '{'||c[i] == '}')
{
la=push(la,c[i]);
}
k=ifpop(la);
if(k){
la->top-=2;
}
}
if(la->top==-1){
printf("yes\n");
}
else{
printf("no\n");
}
return 0;
}
你期待的结果是什么?实际看到的错误信息又是什么?
期待结果:当表达式括号都匹配时输出yes否则输出no
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
应该是出栈判断越界的问题;
的la->top-1 可能为负比如{ ))))) ;这种情况;
第一次
入栈;
la->top=0
判断出栈
la->s[la->top]'&&la->s[(la->top)-1]
la->top -1 数组访问越界就 出问题了,可以加一个判断a->top-1 的值;
还有我不确定
没有匹配,表示匹配不成功吧,
;
可以看看这个我以前写的