double compute(char *str);
以下是实现思路,代码实现:http://blog.youkuaiyun.com/qin_huang/article/details/23955923
代码下载:http://download.youkuaiyun.com/detail/qin_huang/7209657
1.判断给定的字符串是否为空,不为空则去调空格,将新字符串放入char Buffer[120],限定表达式长度不超过120。
2.对char Buffer[120]内的数据进行词法分析(编译原理的内容),先画出状态转换图。词法分析过程用两个指针,一个是当前字符指针,第二个是搜索指针。
3.创建一个double类型的表,将词法分析的常数放入表(涉及将“12”转化成double型的 12),同时创建struct{double *ptr;short id},同时将该常数的指指针放入结构体,将运算符和括号也放入该结构体,
结构体的id用来表示运算符和括号以及常数。
4.词法分析后所有字符都按顺序存入了struct 数组中,利用算术表达式文法分析(编译原理),判断该数组是否符合中缀表达式。若不符合,报出错误。若符合,将中缀表达式转化成后缀表达式。
5.利用后缀表达式求出结果。
注:中缀表达式转化成后缀表达式可以使用栈来解决,过程如下:
1.对于输入字符X,如果X为常数,将X放入后缀表达式。
2.若X是左括号,将X入栈,若X为右括号,栈中的符号出栈,并放入后缀表达式,直到遇到左括号。
3.若X是运算符(+ - * /),将X和栈顶运算符Y比较,X优先级<Y,则弹出Y,若X优先级大于Y,将Y入栈,重复此过程。
重复上述步骤。