社区
数据结构与算法
帖子详情
含有一元操作符的中缀表达式,有办法转化为后缀表达式么?
I_code
2011-11-16 06:51:17
昨天考虑将一个简单的正则表达式转化为后缀形式的时候遇到了这个难题。
比如(a|b)*(c|d)*
在正则表达式中,*表示字表达式出现0次或多次,是一元操作符,并且优先级高过|。所以根据优先级,应该先算a|b 再算c|d,之后接着算两个*。
我首先想到的后缀形式为ab|cd|**.(.表示连结),但是这实际上是(a|b)((c|d)*)*的后缀表达式。
如果写成ab|*cd|*.,则破坏了括号优先计算的规则。
真心求教下各位。
...全文
110
5
打赏
收藏
含有一元操作符的中缀表达式,有办法转化为后缀表达式么?
昨天考虑将一个简单的正则表达式转化为后缀形式的时候遇到了这个难题。 比如(a|b)*(c|d)* 在正则表达式中,*表示字表达式出现0次或多次,是一元操作符,并且优先级高过|。所以根据优先级,应该先算a|b 再算c|d,之后接着算两个*。 我首先想到的后缀形式为ab|cd|**.(.表示连结),但是这实际上是(a|b)((c|d)*)*的后缀表达式。 如果写成ab|*cd|*.,则破坏了括号优先计算的规则。 真心求教下各位。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cfvmario
2011-11-18
打赏
举报
回复
[Quote=引用 2 楼 i_code 的回复:]
引用 1 楼 cfvmario 的回复:
ab|*cd|*没破坏括号优先规则吧
在后缀表达式中,计算顺序不就是运算符号出现的顺序么?所以计算顺序是 | * | *。 如果括号优先不是先算 || 再算 * * 么?
[/Quote]
任何算符优先都是针对运算对象来说的。。
第二个|和第一个*从运算对象来说是没有关系的,为什么一定要第二个|比第一个*先算,没这个必要
就好比(a+b)*(c+d)+(e+f)*g
我先算a+b,再算c+d,再算(a+b)*(c+d)不行么?你非要说括号优先,算完c+d必须先算e+f,这肯定没必要。
cnmhx
2011-11-17
打赏
举报
回复
这个还能有变化?有什么意义?
I_code
2011-11-17
打赏
举报
回复
[Quote=引用 1 楼 cfvmario 的回复:]
ab|*cd|*没破坏括号优先规则吧
[/Quote]
在后缀表达式中,计算顺序不就是运算符号出现的顺序么?所以计算顺序是 | * | *。 如果括号优先不是先算 || 再算 * * 么?
cfvmario
2011-11-17
打赏
举报
回复
ab|*cd|*没破坏括号优先规则吧
中缀
后缀表达式
包含中缀转后缀以及
后缀表达式
计算(或中缀记法)是一个通用的算术或逻辑公式表示方法,
操作符
是以中缀形式处于操作数的中间(例:3 + 4),
中缀表达式
是人们常用的算术表示方法。 与前缀表达式(例:+ 3 4)或
后缀表达式
(例:3 4 +)相比,
中缀表达式
不容易被计算机解析,但仍被许多程序语言使用,因为它符合人们的普遍用法。 与前缀或后缀记法不同的是,中缀记法中括号是必需的。计算过程中必须用括号将
操作符
和对应的操作数括起来,用于指示运算的次序。 例: (1)8+4-6*2用
后缀表达式
表示为: 8 4+6 2*- (2)2*(3+5)+7/1-4用
后缀表达式
表示为: 35+2*71/4-+
中缀表达式
转换为
后缀表达式
(oj题库)
中缀表达式
转换为
后缀表达式
(oj题库)
中缀表达式
转换为
后缀表达式
(oj题库) 题目描述
中缀表达式
是一个通用的算术或逻辑公式表示方法,
操作符
是以中缀形式处于操作数的中间(例:3 + 4),
中缀表达式
是人们常用的算术表示方法。
后缀表达式
不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:(2 + 1) * 3 , 即2 1 + 3 *。利用栈结构,将
中缀表达式
转换为
后缀表达式
。(测试数据元素为单个字符) 输入
中缀表达式
输出
后缀表达式
代码如下 #include #include #include using namesp
中缀算术表达式求值
我们很早就学习如何书写及计算表达式,诸如:8+5*(7-3)之类的表达式,先算括号内的7减去3,得到4,然后再算5乘以4,得到20,再计算8加上20,得到28,因此该表达式的值为28。这是人们熟悉的运算规则额:有括号先算括号内;无括号时,先做乘除法,后做加减法;对于相同级别的运算按从左到右的次序运算。而计算机是如何实现表达式的计算的呢?应用栈的相关知识,编程序实现之。 设计思路:从键盘输入
中缀表达式
,然后将
中缀表达式
转换为
后缀表达式
,利用
后缀表达式
求值。要求以字符序列的形式从终端输入语法正确的、不含变量的整数表达式,利用给定的算术符优先关系,实现对算数四则混合运算表达式的求值,并演示在求值过程中运算符栈、
操作符
栈、输入字符和主要操作的变化过程。
中缀表达式
求值实验报告及源码
设计思路:为了设计一个完整运算器,可以采用将
中缀表达式
转化
为
后缀表达式
进行求解。具体思路: 第一步:先初始化两个栈,分别盛放操作数和
操作符
; 第二步:将输入的字符串去掉空格,从字符串开头开始遍历; 第三步:若遇到的字符位数字,利用标记判断其是否为小数位及小数位的第几位,存在temp变量中,若不为
数据结构 课程设计 中缀算术表达式求值
我们很早就学习如何书写及计算表达式,诸如:8+5*(7-3)之类的表达式,先算括号内的7减去3,得到4,然后再算5乘以4,得到20,再计算8加上20,得到28,因此该表达式的值为28。这是人们熟悉的运算规则额:有括号先算括号内;无括号时,先做乘除法,后做加减法;对于相同级别的运算按从左到右的次序运算。而计算机是如何实现表达式的计算的呢?应用栈的相关知识,编程序实现之。 设计思路:从键盘输入
中缀表达式
,然后将
中缀表达式
转换为
后缀表达式
,利用
后缀表达式
求值。要求以字符序列的形式从终端输入语法正确的、不含变量的整数表达式,利用给定的算术符优先关系,实现对算数四则混合运算表达式的求值,并演示在求值过程中运算符栈、
操作符
栈、输入字符和主要操作的变化过程。
数据结构与算法
33,007
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章