闲来无事,写个四则运算的计算式【包括+,-,*,/,没有括号】;
代码如下:
#include <iostream>
#include <stack>
#include <string>
using namespace std;
class Calc
{
public:
int judge (const string &str)
{
if (str.find ('=') == string::npos)
{
cout<<"input error"<<endl;
return -1;
}
}
int process (int a, int b, char op)
{
if (op == '+')
{
return a + b;
}
if (op == '-')
{
return a - b;
}
if (op == '*')
{
return a * b;
}
return a/b;
}
int result (const string &str)
{
string::const_iterator data = str.begin ();
if (judge (str) == -1)
return -1;
while (*data != '=')
{
if (*data == '*')
{
numA = num.top ();
num.pop ();
data++;
numB = *data - '0';
num.push (process (numA, numB, '*'));
}else if (*data == '/')
{
numA = num.top ();
num.pop ();
data++;
numB = *data - '0';
num.push (process (numA, numB, '/'));
} else if (*data >= '0' && *data <= '9')
{
num.push (*data - '0');
}else
{
op.push (*data);
}
data++;
}
while (!op.empty ())
{
numA = num.top ();
num.pop ();
numB = num.top ();
num.pop ();
num.push (process (numB, numA, op.top ()));
op.pop ();
}
return num.top ();
}
private:
stack <int> num;
stack <char> op;
int numA;
int numB;
};
int main ()
{
string data;
Calc calc;
while (cin>>data)
{
cout<<calc.result (data)<<endl;
}
return 0;
}