PTA 7-1 表达式转换 (25 分)
#include <iostream>
#include <stack>
using namespace std;
int isp(char c)
{
switch(c)
{
case '(':
return 1;
case '*':
return 5;
case '/':
return 5;
case '+':
return 3;
case '-':
return 3;
case ')':
return 6;
case '#':
return 0;
}
return -1;
}
int icp(char c)
{
switch(c)
{
case '(':
return 6;
case '*':
return 4;
case '/':
return 4;
case '+':
return 2;
case '-':
return 2;
case ')':
return 1;
case '#':
return 0;
}
return -1;
}
bool isNum(char a)
{
if(a>='0'&&a<='9')
{
return true;
}
return false;
}
int main()
{
stack<char> s1;
string ss,ss1="";
cin>>ss;
ss=ss+'#';
int i=0;
s1.push('#');
while(!s1.empty())
{
if(isNum(ss[i])||ss[i]=='.')
{
if(isNum(ss[i+1])||ss[i+1]=='.')
ss1+=ss[i];
else ss1=ss1+ss[i]+" ";
i++;
}
else if((ss[i]=='-'||ss[i]=='+')&&(!isNum(ss[i-1])&&ss[i-1]!=')'||i==0))
{
if(ss[i]=='-')
ss1+=ss[i];
i++;
}
else if(icp(ss[i])>isp(s1.top()))
{
s1.push(ss[i]);
i++;
}
else if(icp(ss[i])<=isp(s1.top()))
{
if(s1.top()!='('&&s1.top()!='#')
{
ss1=ss1+s1.top()+" ";
}
else
{
i++;
}
s1.pop();
}
}
cout<<ss1.substr(0,ss1.length()-1)<<endl;
return 0;
}