#include<stdio.h>
#include<stdlib.h>
struct Stack{
char *Data;
int Top;
int MaxSize;
};
struct Stack *create(int maxsize){
struct Stack *s;
s=(struct Stack *)malloc(sizeof(struct Stack));
s->Data=(char *)malloc(sizeof(char)*maxsize);
s->Top=-1;
s->MaxSize=maxsize;
return s;
}
int isEmpty(struct Stack *s){
return s->Top==-1;
}
int isFull(struct Stack *s){
return s->Top==s->MaxSize-1;
}
void push(struct Stack *s,char ch){
if(isFull(s)){
printf("Stack is full.\n");
return;
}
s->Data[++s->Top]=ch;
}
char pop(struct Stack *s){
if(isEmpty(s)){
return NULL;/*如果栈空,返回的空肯定与括号不匹配*/
}
return s->Data[s->Top--];
}
int BracketMatch(char *str,struct Stack *s){/*括号匹配函数*/
int i=0;
char ch;
while(str[i]!='\0'){
switch(str[i]){
case '{':/*如果遇到左括号,直接压栈*/
case '[':
case '(':
push(s,str[i]);
break;
case '}':/*如果遇到右括号,弹一次栈,如果弹出的元素不等于对应括号,就直接没了,返回0*/
ch=pop(s);
if(ch!='{'){
return 0;
}
break;
case ']':
ch=pop(s);
if(ch!='['){
return 0;
}
break;
case ')':
ch=pop(s);
if(ch!='('){
return 0;
}
break;
default:;
}
i++;
}
if(s->Top==-1){
return 1;
}else{
return 0;
}
}
int main(){
char str[50];
scanf("%s",str);
struct stack *s=create(50);
int flag=BracketMatch(str,s);
if(flag){
printf("Successful match.\n");
}else{
printf("Mismatch.");
}
return 0;
}