修改了一点,好用多啦哈哈
#include<iostream>
#include<stack>
#include<string>
using namespace std;
class calculator
{
private:
stack<int>num;
stack<char>op;
string formulas;
public:
calculator()
{
while(!num.empty())
{
num.pop();
}
while(!op.empty())
{
op.pop();
}
formulas="";
}
~calculator()
{
while(!num.empty())
{
num.pop();
}
while(!op.empty())
{
op.pop();
}
formulas="";
}
void input()
{
cin>>formulas;
}
void calculate()
{
int n=formulas.length();
int i=0;
for(i=0;i<n;i++)
{
if(formulas[i]>='0'&&formulas[i]<='9')
{
num.push(formulas[i]-'0');
}
else if(formulas[i]=='+'||formulas[i]=='-')
{
while(!op.empty()&&op.top()!='(')
{
cal_res();
}
op.push(formulas[i]);
}
else if(formulas[i]=='*'||formulas[i]=='/')
{
while(!op.empty()&&op.top()!='('&&op.top()!='+'&&op.top()!='-')
{
cal_res();
}
op.push(formulas[i]);
}
else if(formulas[i]=='(')
{
op.push(formulas[i]);
}
else if(formulas[i]==')')
{
while(op.top()!='(')
{
cal_res();
}
op.pop();
}
}
while(!op.empty())
{
cal_res();
}
cout<<num.top()<<endl;
}
void cal_res()
{
int l,r,ans;
r=num.top();
num.pop();
l=num.top();
num.pop();
char c=op.top();
if(op.top()=='+')
{
ans=l+r;
}
else if(op.top()=='-')
{
ans=l-r;
}
else if(op.top()=='*')
{
ans=l*r;
}
else if(op.top()=='/')
{
ans=l/r;
}
op.pop();
num.push(ans);
}
};
int main()
{
calculator a;
int n=10;
while(n--)
{
a.input();
a.calculate();
}
return 0;
}