输入一串字符串形如(2*(1+3)+8)/4 如何使用程序计算出结果 字符串输入计算器

这是在百度二面的一道算法题,考的是编译原理里面最基础的部分,当时脑子里没有这个概念,答错了,现在整理出来...

问题:实现一个字符串计算器,包含+、-、*、/ 四种操作;输入内容是一个字符串“ (2*(1+3)+8)/4 ”,要求得出计算结果。

解答思路:使用栈的方式来实现,将运算中的中缀表达式转化为后缀表达式再计算[注1]。

步骤:遍历字符串,建立数据栈和操作栈两个栈,依次从数据栈和操作栈中取值,完成计算。

例如:对于表达式 (2*(1+3)+8)/4 

计算方式:

  1. 将(压入栈1

  2. 将2压入栈2

  3. 将*压入栈1

  4. 将1压入栈2

  5. 将+压入栈1

  6. 将3压入栈2

     

此时,遇到 ) 

栈1中内容为 ( 、*、+ 

栈2中内容为2、1、3 

抛出栈1中的+,栈2中的1、3,运输1+3=4,然后将4压入栈2;

抛出并计算后

栈1中内容为 ( 、* 

栈2中内容为2、4 

继续....

懂了吧

 

*******************

注1:前缀、中缀、后缀表达式

三种表达式的记法,区别在于运算符相对于数据的位置,顾名思义,前缀表达式意思是运算符位于数据之前。

举例:

(3+4) * 5 - 6 这是中缀表达式

- * + 3 4 5 6 这是前缀表达式

3 4 + 5 * 6 - 这是后缀表达式

转载于:https://my.oschina.net/chinacion/blog/1551615

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值