思路:
1.首先建立俩个栈,一个存数据(DataStack),另一个存运算符(OperatorStack)
2.表达式计算: 数据->DataSatck,运算符->OperatorStack
if(当运算符栈为空时)
将第一个运算符放入栈中
else if(此时的运算符的优先级 >栈顶的运算符优先级)
运算符入栈
else
把栈顶运算符和两个数据传入到计算函数,然后从栈中弹出,最后将计算后的数据再放入DataStack,
if(当表达式全部分析完)
输出DataStack的最后一个数据(栈顶),这就是表达式的最终结果啦!!
3. 数据转换:因为表达式最初是以String类型存放的,所以需要将String类的数据转换成int or double
while(1){
if(!(expression[i] >='0' && expression[i] <='9') || expression[i] =='\0'){
break;
}
data = data *10 + expression[i] -'0';
i ++;
}
以下是代码实现:
OperatorStack.h
#ifndef __calculator__operator__h
#define __calculator__operator__h
#include <stdio.h>
#include <string>
typedef char operType;
struct node1 //链栈节点
{