#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INIT_STACK_SIZE 100
typedef struct
{
char * chOperator;
int dwtop;
}OPND;
void InitStack(OPND *);
char Pop(OPND *);
void Push(OPND *,char );
char GetTop(OPND);
void printStack(OPND);
char stringBuffer[128] = {'\0'};
int main()
{
OPND opnd;
int length,flag = 0;
char ch,*pch;
InitStack(&opnd);
Push(&opnd,'#');
gets(stringBuffer);
pch = stringBuffer;
length = strlen(stringBuffer);
while(length -- )
{
ch = *pch++;
if((ch == '(') ||(ch == '[')) Push(&opnd,ch);
else if(ch == ')')
{
if(GetTop(opnd) == '(') Pop(&opnd);
else flag = 1;
}
else if(ch == ']')
{
if(GetTop(opnd) == '[') Pop(&opnd);
else flag = 1;
}
}
if(flag || (GetTop(opnd) != '#')) printf("Match false!\n");
else printf("Match succeed!\n");
return 0;
}
void InitStack(OPND *S)
{
S->chOperator = (char *)malloc(INIT_STACK_SIZE * sizeof(char));
if(!S->chOperator) exit(1);
S->dwtop = 0;
}
void Push(OPND *S,char ch)
{
*(S->chOperator + S->dwtop) = ch;
S->dwtop++;
}
char Pop(OPND *S)
{
S->dwtop--;
return *(S->chOperator + S->dwtop);
}
void printStack(OPND opnd)
{
while(opnd.dwtop){
opnd.dwtop--;
printf("%c",*(opnd.chOperator + opnd.dwtop));
}
}
char GetTop(OPND opnd)
{
return *(opnd.chOperator + opnd.dwtop -1);
}