代码: #include <stdio.h> #include <string.h> #include <stdlib.h> #define STACK_INIT_SIZE 500 #define STACKINCREMENT 50 /** ///数据结构.严蔚敏.吴伟民.P49.3.2.2 dabbysunshine@qq.com **/ typedef struct Stack { char *base; char *top; int stacksize; } brackets; int InitStack(brackets &S) { S.base = (char*)malloc(STACK_INIT_SIZE*sizeof(char)); if(!S.base) { exit(0); } S.top = S.base; S.stacksize = STACK_INIT_SIZE; return 0; } int GetTop(brackets S,char &ch) { if(S.base == S.top) { puts("栈为空."); return 0; } ch = *(S.top - 1); return 0; } int Push(brackets &S,char ch) { if(S.top - S.base >= S.stacksize) { S.base = (char *)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof(char)); if(!S.base) { exit(0); } S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; } *S.top++ = ch; return 0; } int Pop(brackets &S) { if(S.top == S.base) { puts("空栈."); return 0; } --S.top; return 0; } int Judge(char *BRACK) { int i = 0; char ch; brackets S; InitStack(S); while(BRACK[i] != '#') { if(S.base == S.top) { if(BRACK[i] == ']' || BRACK[i] == ')' || BRACK[i] == '}') { printf("不匹配"); return 0; } else { Push(S,BRACK[i]); } } else { GetTop(S,ch); if((ch == '['&&BRACK[i] ==']') || (ch == '('&&BRACK[i] ==')') || (ch == '{'&&BRACK[i] =='}') ) { Pop(S); } else if(BRACK[i] =='[' || BRACK[i] =='(' || BRACK[i] =='{') { Push(S,BRACK[i]); } else { printf("不匹配"); return 0; } } i++; } if(S.base == S.top) { printf("匹配"); } else { printf("不匹配"); } return 0; } int main(void) { char BRACK[500]; while(gets(BRACK)) { Judge(BRACK); } return 0; } 不会有那个白痴会直接复制粘贴吧? dabbysunshine@qq.com