实现一个可以完成加减乘除以及长式运算的简易计算器。乘除的优先级高于加减,运算的数都是
正整数以及 0,且不把 0 当做除数,运算结果保留三位小数。
要求:可以连续输入算式,并且有算式格式错误判定
2+7-1
=8.000
9-8*2+1/3
=-6.667
9++1
error
1、计算部分的实现思路
首先,因为仅需要实现加减乘除的功能,优先级最高为乘除运算。
所以,我们可以构建一个字符数组,用于接收算式;构建两个数组对算式进行分离,一个用于存储
数字,一个用于存储符号。
对于符号数组进行遍历,读取到乘或者除运算时,取出数字数组中的操作的进行乘运算后,将数组
后面的数字按位向前移动,重复以上操作即可。
例如:9-8*2+1/3
数组a:9 8 2 1 3
数组b:- * + /
遍历时,读取到*后,取出操作子8、2相乘,后数组更新为
数组a:9 16 1 3
数组b:- + /
2、排除符号错误
符号错误分为一下几类:
(1)符号连续
这一类问题往往在遍历的时候就可以发现,当我在读取到一个符号后,下一位仍就为符号是即可输
出error,结束程序。
6++7
error
(2)符号首尾
这一类问题在遍历的时候也可以发现