用到的是算符优先法的思想,现摘自严蔚敏的数据结构(C 语言版)的3
5 章来详细说明算符优先法的思想: (摘抄结束) 我给出的计算器功能有:支持欧拉数e,支持圆周率pi,支持运算符=,-,*,/,求幂符号^,阶乘
,正弦sin,余弦cos,正切tan,以10 为底的对数函数lg,以欧拉数为底的对数函数ln,优先级表为:(
表示不合法) #inclu de #inclu de #inclu de #inclu de #inclu de //引用请注明出处: http://hi
com/liangxiaowen1989/blog/item/af972310f7119670ca80c413
html #define MAX_TOKEN_LEN 100 //标记最大长度 #define EXPR_INCREMENT 20//表达式长度的增量 typedef struct { double opnd; //操作数 char optr[11]; //运算符 int flag; //若为1,则为单目运算符,2 则是双目运算符 } SElemType; //栈元素类型 typedef struct SNode { //栈 SElemType date; struct SNode * next; } SNode, *Stack; struct { //用来存储一个操作数或运算符 char str[MAX_TOKEN_LEN]; int type; //类型,若为0,则为操作数,若为1 则为运算符 } token; struct { //expression,用来存储表达式 char *str; int cur; //标记读取 expr 的当前位置 }expr; Stack OPND, OPTR; //操作数栈operand,运算符栈operator int expr_size