69,371
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <stack>
using namespace std;
string s;
stack <char> op;
stack <double> dg;
int priority(char c)
{
switch(c)
{
case '+': return 2;
case '-': return 2;
case '*': return 3; //最高
case '/': return 3;
case '=': return 1; //最低
default : return 0;
}
}
double opt(double x,double y,char c)
{
switch(c)
{
case '+':return x+y;
case '-':return x-y;
case '*':return x*y;
case '/':return x/y;
default: break;
}
return 0;
}
int main()
{
// scanf("%s",s);
cin>>s;
int len = s.length();
char temp[101];
int j=0;
for(int i=0; i<len; i++)
{
switch(s[i])
{
case ' ':
{
temp[j]='\0';
if(j>0)
{
int t = atoi(temp);
dg.push(t);
cout<<t<<endl;
}
j=0;
break;
}
case '+':
case '-':
case '*':
case '/':
case '=':
{
while(!op.empty() && priority(s[i])<=priority(op.top()))
{
double y = dg.top();dg.pop();
double x = dg.top();dg.pop();
char c = op.top();op.pop();
double z = opt(x, y, c);
dg.push(z);
}
op.push(s[i]);
cout<<s[i]<<endl;
break;
}
default:
{
temp[j++] =s[i];
}
}
}
cout<<dg.top()<<endl;
system("pause");
return 0;
}