void readStack(stack<char> c)
{
while(!c.empty())
{
cout<<c.top();
c.pop();
}
}
void main()
{
stack<char> cStack;
stack<char> cStack2;//此栈用来存储括号中的内容
int lcnt=0,rcnt=0;//用来表示左右括号数目是否相等
string exp="a+b*(c+(m+n))+x";
for(string::iterator iter=exp.begin();iter!=exp.end();iter++)
{
if(*iter=='(')
lcnt++;
if(*iter!=')')
{
cStack.push(*iter);
}
else if(*iter==')')
{
rcnt++;
cStack2.push(*iter);//将右括号压入新栈
while(cStack.top()!='(')//将到左括号之前的元素全部弹出栈并压入新栈
{
cStack2.push(cStack.top());
cStack.pop();
}
cStack2.push(cStack.top());//此时老栈里面的栈顶符号应为‘(’
cStack.pop();
cStack.push('#');//代替括号的标识符
}
}
if(lcnt==rcnt)
{
readStack(cStack);
cout<<"haha"<<endl;
readStack(cStack2);
}
else
cout<<"表达式中的左右括号数目不等";
}