http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2132.html
#include <iostream>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
#include<queue>
#include<deque>
#include<stack>
#include<stdio.h>
#define cmax 100003
using namespace std;
//综上出栈情况分为右括号,加减号和输入结束
int main()
{
stack<char>p;
char kk;
while(kk=getchar())
{
if((kk>='a'&&kk<='z')||(kk>='A'&&kk<='Z'))
{
cout<<kk;
}
else if(kk=='+'||kk=='-')//出现加减号时,根据优先级原则,将高优先级的符号全部出栈
{
while(!p.empty()&&((p.top()=='*')||p.top()=='/'))
{printf("%c",p.top());
p.pop();
}
p.push(kk);//之后将该符号入栈
}
else if(kk=='('||kk=='*'||kk=='/')
{
p.push(kk);
}
else if(kk==')')//当出现一个右括号时,打印出栈中除左括号外的所有符号,并清空栈
{
while(p.top()!='(')
{
cout<<p.top();
p.pop();
}
p.pop();
}
else if(kk=='#')//打印出之前入栈的所有符号
{
while(!p.empty())
{
cout<<p.top();
p.pop();
}
break;
}
}
return 0;
}
/***************************************************
User name: jk160505徐红博
Result: Accepted
Take time: 0ms
Take Memory: 160KB
Submit time: 2017-01-16 11:04:08
****************************************************/