#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 128
typedef struct
{
char *base, *top;
int capacity;
} Stack;
int InitStack(Stack *pstack)
{
pstack -> base = pstack -> top = (char*)malloc(sizeof(char) * MAXSIZE);
if(!pstack -> base)
return 0;
pstack -> capacity = MAXSIZE;
return 1;
}
int Push(Stack *pstack, char ch)
{
if(pstack -> top - pstack -> base >= pstack -> capacity)
{
pstack -> base = (char*)realloc(pstack -> base, (pstack -> capacity + 10) * sizeof(char));
pstack -> top = pstack -> base + pstack -> capacity;
pstack -> capacity += 10;
}
*(pstack -> top++) = ch;
}
void Pop(Stack *pstack, char *ch)
{
*ch = *(--pstack -> top);
}
int Empty(Stack *pstack)
{
return(pstack -> top - pstack -> base == 0);
}
int main()
{
Stack mStack;
char buffer[MAXSIZE];
int i, len;
InitStack(&mStack);
gets(buffer);
len = strlen(buffer);
for(i = 0; i < len; i++)
{
/*if(buffer[i] == '(')
{
if(i + 1 < len && buffer[i + 1] == ')')
{
i += 1;
continue;
}
}
else if(buffer[i] == '[')
{
if(i + 1 < len && buffer[i + 1] == ']')
{
i += 1;
continue;
}
}*/
if(buffer[i] == '(' || buffer[i] == '[' || buffer[i] == '{' || buffer[i] == '<')
Push(&mStack, buffer[i]);
else if(buffer[i] == ')' || buffer[i] == ']' || bufffer[i] == '}' || buffer[i] == '>')
{
char temp;
Pop(&mStack, &temp);
if((temp == '(' && buffer[i] == ')') || (temp == '[' && buffer[i] == ']') ||
(temp == '{' && bufffer[i] == '}') || (temp == '<' && buffer[i] == '>'))
continue;
else {
printf("isn't matched.\n");
return 0;
}
}
}
if(Empty(&mStack))
printf("matched.\n");
else
printf("isn't matched.\n");
return 0;
}
|