C++ 数据结构 判断一个字符串中括号是否匹配

从键盘读入一个字符串,其中只含有() {} [ ] ,判断该字符串中的每种括号是否成对出现。
借助栈来实现,括号必须配对出现,如()[ ]{},这是匹配的括号,如([{])},这是不匹配的括号(中间无空格)。

思路是遇到左括号就入栈,碰到右括号就判断栈顶的元素是否匹配的左括号,不是的话就返回false,是的话就弹出栈顶元素,然后继续下一个字符。判断函数如下:
bool is_comm_stack(char const* src)
{
assert(src);
char ch;
char const* p=src;
stack<char> s;
while(*p)
{
switch(*p)
{
case '(':
case '[':
case '{':
s.push (*p);
break;
case ')':
if(!s.empty())
{
if((ch=s.top())!='(')
return false;
else
{
s.pop();
break;
}
}
else
return false;
case ']':
if(!s.empty())
{
if((ch=s.top())!='[')
return false;
else
{
s.pop();
break;
}
}
else
return false;
case '}':
if(!s.empty())
{
if((ch=s.top())!='{')
return false;
else
{
s.pop();
break;
}
}
else
return false;
default:
break;

}
++p;
}
if(!s.empty())return false;
return true;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-27
楼下正解,这是个典型的先进后出模型。
第2个回答  2012-10-27
堆栈。。。