塔兹米的 队长:跪求一个判别表达式中括弧是否正确配对的程序!!!

来源:百度文库 编辑:中科新闻网 时间:2024/05/17 03:04:40
假设一个算术表达式中包含圆括弧,方括弧和花括弧三种类型的括弧。编写一个判别表达式中括弧是否正确配对的函数correct(exp,tag);其中:exp为字符串类型的变量(可理解为每个字符占用一个数组元素),表示被判别的表达式,tag为布尔型变量。

#include<stdio.h>
#include<stdlib.h>
#define N 5
struct stack{
char*base;
char *top;
int stacksize;
};
void initstack(struct stack *s)
{ s->base=(char*)malloc(10*sizeof(char));
if(!s->base) exit(0);
s->top=s->base;
s->stacksize=10;
return ;
}
void push(struct stack *s,char e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(char*)realloc(s->base,(s->stacksize+N)*sizeof(char));
if(!s->base) exit(0);
s->top=s->base+s->stacksize;
s->stacksize+=N;
}
*s->top++=e;
return ;
}
void pop(struct stack *s)
{ char e;
if(s->top==s->base) return ;
e=*(--s->top); printf("%c\n",e);
return;
}
int brack_test(char*str)

{ char*p;struct stack s;
initstack(&s);
for(p=str;*p;p++)
{
if(*p=='['||*p=='(')
{ push(&s,*p);}
else if(*p==']'||*p==')')
{
if(*(s.top-1)=='['&& *p==']') pop(&s);

if(*(s.top-1)=='('&& *p==')') pop(&s);
}
}

if (s.base==s.top) return 1;
else return 0;
}
main()
{ int j;
char*str="\0";
printf("\nplease input a string:");
scanf("%s",str);
j=brack_test(str);
if(j==1) printf("%s is match!",str);
else printf("%s is not match!",str);
}
这个是 我以前写的括号匹配的完整程序,供参考,虽然转换函数与你说得有点不同,不过你可以适当修改.应该很容易的.

用堆栈。