这个程序为啥运行不对呢?(括号匹配的判断)

这个程序为啥运行不对呢?(括号匹配的判断)

1 个回答

咱也玩互联网

提问:这个程序为啥运行不对呢?(括号匹配的判断)

网友回答:

你程序有多个错(你对指针的理解有问题)

1。

struct stack *s; initstack(&s);

这样你的s是二级指针了,且它没有初始化

你的void initstack(stack *s)就完全不对了

正确的要用

void initstack(stack **s)

且*s要初始化的

*s=(stack *)malloc(sizeof(stack));

后面的也全要改的

   (*s)->top  =(char*)malloc((100)*sizeof(char)); (*s)->base =(*s)->top   ; (*s)->stacksize  =100;

2。

你既然定义了typedef struct,那说不要用struct stack *s;而是用stack *s;了

3。

你的match(&s);也错了,s已经是指针了,只要match(s);就可以了

4。你的

void pop(stack *s,char e)

它不会改e的错的(这个是基础),你要用指针的,改为

void pop(stack *s,char e)

然后调用时改

pop(s,e);

pop(s,&e);

5。程序中两处elseif应该是else if (可能是复制的问题)


完整改好的可运行的

#include<stdio.h> #include<malloc.h> #include<string.h> typedef struct { int stacksize; char *top; char *base; } stack; void initstack(stack **s) { *s=(stack *)malloc(sizeof(stack));    (*s)->top  =(char*)malloc((100)*sizeof(char)); (*s)->base =(*s)->top   ; (*s)->stacksize  =100; } void push(stack *s,char e) { *s->top  =e; s->top++; } void pop(stack *s,char *e) { s->top--; *e=*s->top; } int panduan(char a,char b) { if(a=='('&&b==')') return 0; else if(a=='{'&&b=='}') return 0; else if(a=='['&&b==']') return 0; else return 1; } int match(stack *s) { char c,e; c=getchar(); while(c!='#') { if(c=='('||c=='{'||c=='[') push(s,c); if(c==')'||c=='}'||c==']') { if(s->top ==s->base ) { printf("不匹配"); return 0; } else pop(s,&e); if(panduan(e,c)) { printf("不匹配"); return 0; } } c=getchar(); } if(s->top ==s->base ) printf("匹配"); else printf("不匹配");    return 1; } int main() {    stack *s; initstack(&s); match(s); }

  • 1 关注
  • 0 收藏, 浏览
  • 提出于

相似问题