0001 bool paren ( const char exp[], int lo, int hi ) { //表达式括号匹配检查,可兼顾三种括号 0002 Stack<char> S; //使用栈记录已发现但尚未匹配的左括号 0003 for ( int i = lo; i <= hi; i++ ) /* 逐一检查当前字符 */ 0004 switch ( exp[i] ) { //左括号直接进栈;右括号若与栈顶失配,则表达式必不匹配 0005 case '(': case '[': case '{': S.push ( exp[i] ); break; 0006 case ')': if ( ( S.empty() ) || ( '(' != S.pop() ) ) return false; break; 0007 case ']': if ( ( S.empty() ) || ( '[' != S.pop() ) ) return false; break; 0008 case '}': if ( ( S.empty() ) || ( '{' != S.pop() ) ) return false; break; 0009 default: break; //非括号字符一律忽略 0010 } 0011 return S.empty(); //整个表达式扫描过后,栈中若仍残留(左)括号,则不匹配;否则(栈空)匹配 0012 }