中缀表达式转化成后缀表达式的计算(17)
时间:2025-04-30
时间:2025-04-30
中缀表达式的直接计算,中缀表达式转化成后缀表达式的计算
五、遇到的问题及解决
问题1:从字符数组中截取出数字的操作,并转化成浮点型的数不正确。计算的结 果有时候是一个意想不到的很大的数。
问题1的解决方法:从字符数数组中将数字截取出来就是为了能进行计算,而数字是单个字符的形式存在,必须把一个完整的数从算术表达式中截取出来,如果遇到数字的字符就是一个数字的入口,然后循环取出直到遇到不是数字或者小数点为止。而这些取出的数字是一堆离散的数字字符。这时候就需要建立一个辅助的数组来存放这些数字字符以组成一个数字的字符。用一个辅助的索引将数字的组成字符一个一个从数组中取出来,存放到新的数组中,以得到一个字符串的数字。从数组中截取出一个数后,将取出的数用atof 函数进行转化成浮点型的数。在把浮点型的数存放到数栈中,在后面的计算中取出。在调试中第一个取出的浮点型数是正确的,当遇到后面截取的数的长度比第一个数短的时候,发现取出的数和第一个数的位数相同了。经过分析,每次截取完数字后并没有对辅助数组进行重新的初始化,数组中宗存放着前一个字符,一旦遇到数字比前面的数字短的的情况,后面的数字只覆盖了前面的数字的前几位,后面的几位都是原先的数字。造成取出的结果是错误的。解决问题的方法可以在每次存放数字之前,把辅助数组进行初始化,结果能正确计算表达式。
问题2:如何生成后缀表达式,将数与字符存放在一个字符串中。
问题2的解决方法:想把数字从字符数组中取出来,然后再存入后缀表达式中,从 字符数组中取出是很容易的,但是在把这些数字和操作符进行存入一个后缀表达式数 的时候出现了问题,因为c 语言中没有这样的字符数组,所以取出的数字根本没法和操作符一块存到一个数组中去。改变一种想问题的方法,就是不把字符数组的数字都截取出来,而是把数字进行一个分割,让数字还依旧存放在数组中,只是在每个数字的后面都加上一个分割符号“|”,然后要是遇到操作符也将操作符存放到这个数组中并且也加入分隔符,这样就组成了一个全新的数组,也即是后缀表达式。这里的修改是遇到数字,边走边存,一个数字取完后就在数字的后面加分隔符。如果是操作符,则进行优先级的判断,根据判断的结果把操作符加入到数组中,以生成后缀表达式。对新生成的后缀表达式数组在进行计算,在后缀表达式中将数字截取出来,这样子做的效果比原先就截取出来好实现。通过扫面后缀表达式,根据分隔符可以很简单的就截取出一个数字字符串,再把字符串数字转化成浮点数存放到数栈中,遇到操作符就计算,从数栈中取出两个数字,连同操作一起调用函数进行计算。循环扫描,直到扫描到“\0”,最后将结果从数栈中取出作为结果返回给主函数。
问题3:如何解决除数是零的问题
问题3的解决方法:在进行除法运算的时候,遇到除数为 0 的情况肯定是特殊处 理的,但是该如何让程序在遇到这个问题的时候退出程序,并输出提示错误的信息。 这时候需要用到一个c 语言里面自带的一个函数,如果是除数为零的情况就调用函数exit(-1),给赋值为-1的时候就能正确低从程序中跳出来,只要在跳出之前打印错误的信息就可以达到想要的效果了。
下一篇:O型圈技术手册