题目:假设表达式中允许出现圆括号和方括号,其嵌套顺序随意,设计算法检验给定表达式中的括号是否匹配。
/*
* Brackets matching algorithm by utilizing stack.
*
* fduan, Dec. 31, 2011.
*/
bool is_pair( char c1, char c2 )
{
return ( c1 == '(' && c2 == ')' ) || ( c1 == '[' && c2 == ']' );
}
bool brackets_match( std::string & str )
{
using std::stack;
stack<char> ss;
int i;
char c;
for( i = 0; i < str.size(); ++i )
{
if( str[i] == '(' || str[i] == '[' )
ss.push( str[i] );
else if( str[i] == ')' || str[i] == ']' )
{
c = ss.top();
if( is_pair( c, str[i] ) )
ss.pop();
else
break;
}
}
return ss.empty() ? true : false;
}