自己写的
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
string CalPolishNotation(vector<string> &vecstr)
{
if(vecstr.size()>1)
{
for(int i=0;i<vecstr.size();i++)
{
if(((vecstr[i]=="+")||(vecstr[i]=="-")||(vecstr[i]=="*")||(vecstr[i]=="/")))
{
if(vecstr[i+1]!="+"&&vecstr[i+1]!="-"&&vecstr[i+1]!="*"&&vecstr[i+1]!="/")
{
if(vecstr[i+2]!="+"&&vecstr[i+2]!="-"&&vecstr[i+2]!="*"&&vecstr[i+2]!="/")
{
double dval=0,dval1=0,dval2=0;
dval1=atof(vecstr[i+1].c_str());
dval2=atof(vecstr[i+2].c_str());
if(vecstr[i]=="+")
{
dval=dval1+dval2;
}
else if(vecstr[i]=="-")
{
dval=dval1-dval2;
}
else if(vecstr[i]=="*")
{
dval=dval1*dval2;
}
else if(vecstr[i]=="/")
{
dval=dval1/dval2;
}
stringstream ss;
ss<<dval;
// const std::string& new_val = std::to_string(dval);
vecstr.insert(vecstr.begin()+i,ss.str());
vecstr.erase(vecstr.begin()+i+1);
vecstr.erase(vecstr.begin()+i+1);
vecstr.erase(vecstr.begin()+i+1);
break;
}
}
}
}
CalPolishNotation(vecstr);
}
return vecstr[0];
}
int main()
{
string strcin;
vector<string> vecstr;
while(cin>>strcin)
{
vecstr.push_back(strcin);
if(cin.get()=='\n')
break;
}
string strret=CalPolishNotation(vecstr);
cout<<strret<<endl;
return 0;
}
我觉得老师的代码真是牛,简洁明了:
#include <iostream>
using namespace std;
double exp()
{
char s[20];
cin>>s;
switch(s[0])
{
case '+':
return exp()+exp();
break;
case '-':
return exp()-exp();
break;
case '*':
return exp()*exp();
break;
case '/':
return exp()/exp();
break;
default:
return atof(s);
break;
}
}
int main()
{
cout<<exp()<<endl;
return 0;
}