之前不会写计算器被嘲笑过一番,今天在复习一遍中缀表达式变后缀,然后用后缀表达式计算简单加减乘除括号的计算器,其实让我代码实现还是很困难的,但是我们要有打不死的小强精神哇!
在舍友们纷纷霉霉的出去约会电影街拍的周六,我还在邋里邋遢的沉浸于《三体》以及找不到实习的懒惰生活中并打起精神敲一篇参考于别人blog的博文。
emm我是最棒(pang)的!
加油鸭 我的胖友们
原理
【中缀变后缀】
每一个中缀表达式都可以转换为后缀表达式,利用stack先进后出的原则进行优先级的选择。
1.如果是数字,直接输出到后缀表达式的尾端。比如第一个a直接写到后缀表达式的第一个,b在a的后边。
2.如果是 ‘+’ ‘-’号,pop出栈顶的操作符,直到栈空;或者直到pop出‘(’,此时要将‘(’重新push入栈并不加入后缀表达式;最后将此操作符入栈。
3.如果是 ‘ * ’ ‘/’ ‘(’ 直接入栈,谁让他们优先级最高嘞
4.如果遇到‘)’,依次pop出栈顶操作符添加到后缀表达式的尾部,直到pop出‘(’,丢弃‘(’。
5. 遇到终止符‘=’,一次pop出栈顶元素,直到栈为空
【举个小例子】
用最经典的a+b*(c-d)+e举例
- a,直接添加到后缀表达式的尾部,中缀