签到

05月05日
尚未签到

共有回帖数 0

    顾我心安

    等级:
    要写一个表达式计算器,但是很多实现用的什么栈啊,二叉树啊,递归啊,编译原理,文法之类的菜鸟表示一个词都看不懂啊,但是仍然可以很容易地实现一个表达式计算器,先来看一个典型的表达式
    4*(3*(8+2))/2+3
    主要问题在于怎么处理各种嵌套,还有优先级问题。
    先来看一般人是怎么计算的
    我们先把8+2算出来是10,并且用10替换原来的8+2 :
    4*(3*(10))/2+3
    再把3*(10)计算出来,并且用30替换原来的3*(10):

    。。。。。。


    计算机也一样,只要把最简单的可计算表达式,3-1,5+2之类的东西计算出来,然后替换原来的表达式,构成一个新表达式,再用相同的方法处理新表达式,不断进行下去,直到结果是一个数字,计算完成。
    如果要支持函数,也是一样的,无论嵌套情况如何,总有最简单的算术运算或者最简单的函数运算,只要算出来并且替换就可以了。
    这种方法的一个实现:https://github.com/one-point/exp_calculator
    还在完善中,异常处理什么的完全没做,也不知道有没有其他bug,链接里有更详细的说明,开启过程查看,看一下效果(完全可以用函数做一些其他事,比如下面第二个式子rgb到hex转换):

    楼主 2015-06-20 00:28 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知