您的位置:首页 > 编程语言 > C语言/C++

求出算术表达式字符串的值

2014-04-12 23:54 106 查看
double compute(char *str);

以下是实现思路,代码实现:http://blog.csdn.net/qin_huang/article/details/23955923

代码下载:http://download.csdn.net/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入栈,重复此过程。

重复上述步骤。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息