括号匹配
#include<stdio.h>
#include<stdlib.h>
struct stack
{
char *base;
char *top;
};
int initstack(stack *h)
{
h->base=(char *)malloc(sizeof(char));
h->top=h->base;
return 1;
}
int crestack(stack *h,char e)
{
*h->top++=e;
return 1;
}
char gettop(stack *h)
{
return *(h->top-1);
}
int destory(stack *h)
{
--h->top;
}
int redes(stack *h)
{
h->top=h->base;
free(h->base);
}
int main()
{
stack *h;
initstack(h);
char c;
while(scanf("%c",&c))
{
while(c!='#')
{
if(NULL==h)
{
crestack(h,c);
}
else
{
char r=gettop(h);
if(r=='['&&r==c-2||r=='('&&r==c-1) destory(h);
else crestack(h,c);
}
scanf("%c",&c);
}
if(h->base==h->top) printf("yes\n");
else printf("no\n");
redes(h);
}
}

浙公网安备 33010602011771号