题目:假设表达式中允许出现圆括号和方括号,其嵌套顺序随意,设计算法检验给定表达式中的括号是否匹配。
/*
* 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;
}

本文详细介绍了使用栈数据结构解决括号匹配问题的算法,包括定义is_pair函数判断一对括号是否匹配,以及brackets_match函数通过遍历字符串并使用栈来检查整个表达式的括号是否正确匹配。
479

被折叠的 条评论
为什么被折叠?



