本文主要参考了使用栈实现表达式求值的写法,具体的算法实现可以看一下.补充完善了在有小数参与运算的情况下该如何实现.
在处理的过程中需要用到两个栈,一个是运算符栈,一个是数字栈.遇到小数点就做特殊处理.
double get_answer(){
opter.push('#');
int counter = 0;
char c = getchar();
bool numcou = false;
int numcouter = -1;
while(c != '#' || opter.top() != '#')
{
if (isdigit(c) || c == '.'){
if (c == '.') numcou =true;
if (numcou == true) numcouter += 1;
if (counter == 1 && c != '.'){
double t = opval.top();
opval.pop();
opval.push(t * 10 + c - '0');
}
else if (counter == 0 && c != '.') opval.push(c - '0');
counter = 1;
c = getchar();
if (!isdigit(c) && c != '.' && numcou ==true){
double t = opval.top();
opval.pop();
opval.push(t/pow(10,numcouter));
numcou = false;
numcouter = -1;
}
}
else{
counter = 0;
switch (get_priority(opter.top(),c))
{
case '<':
opter.push(c);
c = getchar();
break;
case '=':
opter.pop();
c = getchar();
break;
case '>':
char theta = opter.top();
opter.pop();
double a = opval.top();
opval.pop();
double b = opval.top();
opval.pop();
opval.push(calculate(b,theta,a));
}
}
}
return opval.top();
}
最终的结果: