/* 基于栈的括号配对 */ #include <stdio.h> #define MAX_STRING 0xff #define MAX_STACK 0xff main() { const char match_tab[3][2] = {{'{','}'}, {'[',']'}, {'(',')'}}; int i=0,len=0,TOP=-1,flag=0; int stk[MAX_STACK] = {0}; char s[MAX_STRING] = {'/0'}; len = scanf("%s",s); for(i=0; s[i]!='/0'; ++i) { if(s[i] == match_tab[0][0] ) stk[++TOP] = 0; else if(s[i] == match_tab[1][0]) stk[++TOP] = 1; else if(s[i] == match_tab[2][0]) stk[++TOP] = 2; else if(s[i] == match_tab[0][1]) { if(stk[TOP--] != 0) {flag = 1; break;} } else if(s[i] == match_tab[1][1]) { if(stk[TOP--] != 1) {flag = 1; break;} } else if(s[i] == match_tab[2][1]) { if(stk[TOP--] != 2) {flag = 1; break;} } } if(flag) printf("Not match!/n"); else printf("Match!/n"); } 老师的程序 --> #include "stdio.h" typedef struct { char stack[100]; int top; } StackType; int IsBracket( char ch, char *Bracket ) { char *p = Bracket; while ( *p != '/0' ) { if ( ch == *p ) return 1; p++; } return 0; } int FindBracket(char ch, char *Bracket) { int i; i=0; while ( Bracket[i]!=ch && Bracket[i]!='/0' ) i++; if(Bracket[i]!='/0') return i; else return -1; } int BracketMatch(char exp[]) { char LeftBracket[] = "([{"; char RightBracket[] = ")]}"; char Bracket[] = "()[]{}"; StackType st; int i,k; char c; st.top=0; i=0; while(exp[i]!='/0') { c=exp[i++]; if(!IsBracket(c,Bracket)) continue; else if (IsBracket(c,LeftBracket)) st.stack[++st.top]=c; else { k=FindBracket(c,Bracket); if(st.top==0) return 1; else if(Bracket[k-1]!=st.stack[st.top]) return 2; else st.top--; } } if(st.top!=0) return 3; else return 0; } void main() { char s[100]; int error; gets(s); error=BracketMatch(s); if(error==0) printf("匹配成功!/n"); else if(error==1) printf("不匹配: 右括号先于左括号出现!/n"); else if(error==2) printf("不匹配: 左右括号配对时的类型不匹配!/n"); else if(error==3) printf("不匹配: 左括号多于右括号!/n"); }