标签:false compute info mat c++ 设计 cst 优点 2.3
#include <iostream>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cmath>
using namespace std;
char s[1000];
int i;
double Translation(int & i)
{
double integer = 0.0;
double remainder = 0.0;
while (s[i] >= ‘0‘ && s[i] <= ‘9‘)
{
integer *= 10;
integer += (s[i] - ‘0‘);
i++;
}
if (s[i] == ‘.‘)
{
i++;
int c = 1;
while (s[i] >= ‘0‘ && s[i] <= ‘9‘)
{
double t = s[i] - ‘0‘;
t *= pow(0.1, c);
c++;
remainder += t;
i++;
}
}
return integer + remainder;
}
int GetLevel(char ch)
{
switch (ch)
{
case ‘+‘:
case ‘-‘:
return 1;
case ‘*‘:
case ‘/‘:
return 2;
case ‘(‘:
return 0;
case ‘#‘:
return -1;
};
}
double Operate(double a1, char op, double a2)
{
switch (op)
{
case ‘+‘:
return a1 + a2;
case ‘-‘:
return a1 - a2;
case ‘*‘:
return a1 * a2;
case ‘/‘:
return a1 / a2;
};
}
double Compute()
{
stack<char> optr;
stack<double> opnd;
optr.push(‘#‘);
int len = strlen(s);
bool is_minus = true;
for (i = 0; i < len;)
{
if (s[i] == ‘-‘ && is_minus)
{
opnd.push(0);
optr.push(‘-‘);
i++;
}
else if (s[i] == ‘)‘)
{
is_minus = false;
i++;
while (optr.top() != ‘(‘)
{
double a2 = opnd.top();
opnd.pop();
double a1 = opnd.top();
opnd.pop();
char op = optr.top();
optr.pop();
double result = Operate(a1, op, a2);
opnd.push(result);
}
optr.pop();
}
else if (s[i] >= ‘0‘ && s[i] <= ‘9‘)
{
is_minus = false;
opnd.push(Translation(i));
}
else if (s[i] == ‘(‘)
{
is_minus = true;
optr.push(s[i]);
i++;
}
else
{
while (GetLevel(s[i]) <= GetLevel(optr.top()))
{
double a2 = opnd.top();
opnd.pop();
double a1 = opnd.top();
opnd.pop();
char op = optr.top();
optr.pop();
double result = Operate(a1, op, a2);
opnd.push(result);
}
optr.push(s[i]);
i++;
}
}
while (optr.top() != ‘#‘)
{
double a2 = opnd.top();
opnd.pop();
double a1 = opnd.top();
opnd.pop();
char op = optr.top();
optr.pop();
double result = Operate(a1, op, a2);
opnd.push(result);
}
return opnd.top();
}
int main()
{
while (cin >> s)
cout << "结果为:" << Compute()<< endl << endl;
}
这段代码的功能是进行四则运算,优点:将部分运算符优先级用数字表示,便于比较字符优先级。
地址:https://gitee.com/adressad/codes/9ystlgoh6b413n5vfupa839
标签:false compute info mat c++ 设计 cst 优点 2.3
原文地址:https://www.cnblogs.com/linyiwei/p/8836324.html