#include
#include
const int MAXSIZE = 100;
typedef char SElemType;
typedef struct node {
SElemType data[MAXSIZE];
int top;
}*s_bracket;
int isFull(s_bracket S) { return S->top >= MAXSIZE; }
int isEmpty(s_bracket S) { return S->top == 0; }
int Push(s_bracket S,SElemType x) {
if(isFull(S)) return 0;
S->data[S->top++] = x;
return 1;
}
int Pop(s_bracket S,SElemType *x) {
if(isEmpty(S)) return 0;
*x = S->data[--S->top];
return 1;
}
int GetTop(s_bracket S,SElemType *x) {
if(isEmpty(S)) return 0;
*x = S->data[S->top - 1];
return 1;
}
int StackSize(s_bracket S) { return S->top; }
int main() {
s_bracket S = (s_bracket)malloc(sizeof(struct node));
char exp[MAXSIZE],bracket;
int i,matched;
printf("输入表达式:\n");
while(fgets(exp,MAXSIZE,stdin)) {
S->top = 0;
i = matched = 0;
while(exp[i]) {
if(exp[i] == '{' || exp[i] == '[' || exp[i] == '(')
Push(S,exp[i]);
if(exp[i] == '}') {
if(!isEmpty(S)) {
Pop(S,&bracket);
if(bracket == '{') ++matched;
}
}
if(exp[i] == ']') {
if(!isEmpty(S)) {
Pop(S,&bracket);
if(bracket == '[') ++matched;
}
}
if(exp[i] == ')') {
if(!isEmpty(S)) {
Pop(S,&bracket);
if(bracket == '(') ++matched;
}
}
++i;
}
printf("共匹配 %d 对。\n",matched);
printf("输入表达式( 结束):\n");
}
return 0;
}