给定一个字符串里面有很多括号,你怎么知道这些字符串是匹配的呢,还是随便写的呢?下面的程序将利用栈对括号进行匹配。
void printMatchedPairs(string expr)
{
arrayStack<int> s;
int length=(int)expr.size();
for(int i=0;i<length;i++)
if(expr.at(i)=='(')
s.push(i)//将遇到的左括号全部压入栈中
else
if(expr.at(i)==')')
try
{
cout<<s.top()<<' '<<endl;//当前的右括号一定与前一个左括号匹配,如果栈离没有左括号,则没有匹配
s.pop();
}
catch(stackEmpty)
{
cout<<"No match for right parenthesis"<<"at"<<i<<endl;
}
while(!s.empty())
{
cout<<"No match for left parenthesis at"<<s.top()<<endl;
s.pop();
}
}