思路是遇到左括号就入栈,碰到右括号就判断栈顶的元素是否匹配的左括号,不是的话就返回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;
}
温馨提示:答案为网友推荐,仅供参考