Java解析字符串表达式--逆波兰表达式的生成

本文介绍了如何使用Java将中缀表达式转换为后缀表达式(逆波兰表达式)。通过逐字符读取表达式,根据运算符优先级与栈操作规则,将6 * ( 5 + ( 2 + 3) * 8 + 3)转换为6 5 2 3 + 8 * + 3 + *。文章提到了处理多位数、除法时的非零判断、负数和小数等复杂情况的处理思路。
摘要由CSDN通过智能技术生成

上回讲了如何计算后缀表达式,其实真正的难点在于如何将一个正常的字符串表达式(中缀表达式)变成一个后缀表达式。如将6 * ( 5 + ( 2 + 3) * 8 + 3)变为6 5 2 3 + 8 * + 3 + *

逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出。逆波兰表达式又叫做后缀表达式。这个知识点在数据结构和编译原理这两门课程中都有介绍,下面是一些例子:

正常的中缀表示 逆波兰表达式
a+b a,b,+
a+(b-c) a,b,c,-,+
a+(b-c)*d a,b,c,-,d,*,+
a+d*(b-c) a,d,b,c,-,*,+

首先约定表达式中运算符的优先级,从大到小依次为:()、* 和 /、+ 和 -。暂时只考虑四则运算。

顺序读取字符串表达式,规则:

  1. 读到的是操作数,直接输出;
  2. 读到的是操作符ÿ
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值