求出算术表达式字符串的值
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入栈,重复此过程。
重复上述步骤。
以下是实现思路,代码实现: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入栈,重复此过程。
重复上述步骤。
相关文章推荐
- 解析算术表达式字符串
- 字符串算术表达式求值
- java字符串转换成算术表达式
- Java 字符串算术表达式求值
- Java 字符串算术表达式求值
- 将某个指定的字符串表达式转换为算术表达式并计算其结果
- 11-php布尔,浮点,字符串细节,以及表达式和算术运算符
- java将字符串转成算术表达式
- 现有字符串形式的算术表达式,求计算其值。
- java将字符串转成算术表达式
- 正则表达式法计算字符串算术表达式
- java 将字符串转成算术表达式进行计算
- 正则表达式法计算字符串算术表达式2
- Java 字符串算术表达式求值
- php字符串算术表达式计算
- 用正则表达式处理字符串中的分组问题
- C++ 算术表达式求解
- 【4】通过简化的正则表达式处理字符串
- JAVA 正则表达式:使用group方法计算匹配到的字符串个数
- C#中利用正则表达式实现字符串搜索