方法:
void StrMacthByStack(string s)
{
stack<string> left;
while (!s.empty())
{
string character=s.substr(0,1); //取字符串首字母
s=s.substr(1); //剩余的字符串
if(character=="{"||character=="["||character=="(")
{
left.push(character); //如果是左括号,则压入栈
}
else if(character==")"||character=="]"||character=="}")
{
if(left.empty()) //首先检查栈是否为空
return ;
string leftChar=left.top(); //取栈顶元素
left.pop(); //删除栈顶元素
if(character==")")
{
if(leftChar!="(") //检查左右括号是否匹配
return ;
else
{
cout<<" "+leftChar + ")"<<endl;
}
}
else if(character=="]")
{
if(leftChar!="[")
return ;
else
{
cout<<" "+leftChar + "]"<<endl;
}
}
else if(character=="}")
{
if(leftChar!="{")
return ;
else
{
cout<<" "+leftChar + "}"<<endl;
}
}
}
}
}
测试类:
int _tmain(int argc, _TCHAR* argv[])
{
string str = "(liu78{09f[0]9})";
StrMacthByStack(str);
return 0;
}
结果: