#include <stdio.h>
#define MAXSIZE 50
typedef struct
{
char data[MAXSIZE];
int top;
int base;
}sqstack;
void InitStack(sqstack *);
int Empty(sqstack *);
void Push(sqstack *, char );
char Pop(sqstack *);
int MatchingCheck(void);
void InitStack(sqstack *s)
{
s->top = 0;
s->base = 0;
}
int Empty(sqstack *s)
{
if(s->top == s->base)
return 1;
else
return 0;
}
void Push(sqstack *s, char x)
{
if(s->top == MAXSIZE)
{
printf("OVER FLOW!/n");
exit(0);
}
else
{
s->data[s->top] = x;
s->top++;
}
}
char Pop(sqstack *s)
{
char e;
if(Empty(s))
{
printf("Under flow!/n");
exit(0);
}
else
{
s->top--;
e = s->data[s->top];
return e;
}
}
int MatchCheck()
{
int i=0;
sqstack s;
char ch[100];
InitStack(&s);
printf("/nPlease input your Bracket with # to end: /n");
ch[i] = getchar();
while(ch[i] != '#')
{
if(ch[i] == '(' || ch[i] == '['|| ch[i]== '{')
Push(&s,ch[i]);
if(ch[i] == '}' || ch[i] == ']'|| ch[i] ==')')
{
if(Empty(&s))
{
return 0;
}
else
{if((ch[i]=='}' && s.data[s.top-1]=='{') || (ch[i]==']' && s.data[s.top-1]=='[')|| (ch[i]==')' && s.data[s.top-1]=='('))
Pop(&s);
else printf("The place of not matched is %d ! /n",i+1);
}
}
i++;
ch[i]=getchar();
}
if(Empty(&s))
return 1;
else
return 0;
}
int main(void)
{
char c;
while(1)
{
printf("##################COPY.NET1-HEXIAOQIANG################## /n");
printf("#****************** TEACHER.MAQIAOMEI ******************#/n");
printf("#*^^^**^^^*** ***^^^**^^^*#/n");
printf("#**0****0**** ****0****0**#/n");
printf("#************ BRACKET MATCHED ************# /n");
printf("#****~~****** ******~~****#/n");
printf("#************ ************#/n");
printf("#*************$$$$** REG. NORTH UNIVERSITY **$$$$*************#/n");
printf("#################### OF CHINA ####################/n");
if(MatchCheck())
printf("Bracket-matched is successed! /n");
else
printf("Bracket-matched is not successed! /n");
printf("/nPlease press 'q' to quite or 'c' to continue:");
do{
c = getchar();
if(c == 'q' || c == 'Q') exit(0);
}while((c!='c') && (c!='C'));
system("cls");
}
return 1;
}