括号匹配,达不到预想效果

独自等待_lg 2012-11-18 10:33:05
#include<stdio.h>
#include<stdlib.h>
#define A 30
#define B 10
#define ERROR 0
typedef struct sqstack
{
int *base;
int *top;
int stacksize;
}sqstack;
sqstack s;
int initstack();
int gettop();
int pop();
int push();
int check();
int initstack(sqstack s)
{
s.base = (int*)malloc(A * sizeof(char));
if(!s.base) exit(-2);
s.top = s.base;
s.stacksize = A;
return 1;
}
int gettop(sqstack s, char e)
{
if(s.top == s.base) exit(-2);
e = *(s.top - 1);
return e;
}
int pop(sqstack s, char e)
{
if(s.top == s.base) return ERROR;
e = *--s.top;//s.top--;e=*s.top;
return 1;
}
int push(sqstack s,char e)
{
if(s.top - s.base >= s.stacksize)
{
s.base = (int*)realloc(s.base, (s.stacksize + B) * sizeof(char));
if(!s.base) exit(-2);
s.top = s.base + s.stacksize;
s.stacksize += B;
}
*s.top++ = e;//*s.top=e; s.top++;
return 1;
}
int check(sqstack s)
{
char a[8];int i;char c;char e=0;
printf("请输入括号\n");
for(i=0 ; i<8 ; i++) scanf("%c",&a[i]);
printf("输出括号\n");
for(i=0 ; i<8 ; i++) printf("%c",a[i]);
printf("\n");
initstack(s);
while(1)
{
for(i=0 ; i<8 ; i++)
{
c=a[i];
switch(c)
{
case '[':
case '(':
case '{':
case '<':
push(s,c);
printf("成功!\n");
break;
case ']':
if(gettop(s,e) == '[')
{
printf("进行ing!");
pop(s,e);
printf("%c",e);
}
break;
case ')':
if(gettop(s,e) != '(')
pop(s,e);
break;
case '}':
if(gettop(s,e) != '{')
pop(s,e);
break;
case '>':
if(gettop(s,e) != '<')
pop(s,e);
break;
default: break;
}
}
}
return 1;
}
int main()
{
initstack();
check();
return 0;
}

...全文
100 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
漫步者、 2012-11-19
  • 打赏
  • 举报
回复
你设计得有点问题:

#include<stdio.h>
#include<stdlib.h>
#define A 30
#define B 10
#define ERROR 0
typedef struct sqstack
{
int *base;
int *top;
int stacksize;
}sqstack;
sqstack s;
int initstack(sqstack &s);
int gettop();
int pop();
int push();
int check(sqstack s);
int initstack(sqstack &s)
{
s.base = (int*)malloc(A * sizeof(char));
if(!s.base) exit(-2);
s.top = s.base;
s.stacksize = A;
return 1;
}
int gettop(sqstack s, char e)
{
if(s.top == s.base) exit(-2);
e = *(s.top - 1);
return e;
}
int pop(sqstack s, char e)
{
if(s.top == s.base) return ERROR;
e = *--s.top;//s.top--;e=*s.top;
return 1;
}
int push(sqstack s,char e)
{
if(s.top - s.base >= s.stacksize)
{
s.base = (int*)realloc(s.base, (s.stacksize + B) * sizeof(char));
if(!s.base) exit(-2);
s.top = s.base + s.stacksize;
s.stacksize += B;
}
*s.top++ = e;//*s.top=e; s.top++;
return 1;
}
int check(sqstack s)
{
char a[8];int i;char c;char e=0;
printf("请输入括号\n");
for(i=0 ; i<8 ; i++) scanf("%c",&a[i]);
printf("输出括号\n");
for(i=0 ; i<8 ; i++) printf("%c",a[i]);
printf("\n");
initstack(s);
while(1)
{
for(i=0 ; i<8 ; i++)
{
c=a[i];
switch(c)
{
case '[':
case '(':
case '{':
case '<':
push(s,c);
printf("成功!\n");
break;
case ']':
if(gettop(s,e) == '[') 
{ 
printf("进行ing!");
pop(s,e); 
printf("%c",e);
}
break;
case ')':
if(gettop(s,e) != '(') 
pop(s,e); 
break;
case '}':
if(gettop(s,e) != '{') 
pop(s,e); 
break;
case '>':
if(gettop(s,e) != '<') 
pop(s,e);
break;
default: break;
}
}
}
return 1;
}
int main()
{
	sqstack s;
initstack(s);
check(s);
return 0;
}

独自等待_lg 2012-11-18
  • 打赏
  • 举报
回复
主要是第一个case:里面的语句,在运行时,有问题……
骁Captain 2012-11-18
  • 打赏
  • 举报
回复

initstack();
check();
main中调用没有传入参数,前面函数声明也有问题

69,371

社区成员

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

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