计算器c++实现

1.中缀表达式转后缀表达式
<colorscheme colors="#ffffff,#000000,#1c1c1c,#333399,#00e4a8,#ffcf01,#ff0000,#3333cc"></colorscheme>
中缀:a/(b-c)+d*e
后缀: abc-/de*+
转换步骤:
(1)从左到右扫描中缀表达式,遇到#转(6);
(2)遇到操作数直接输出;(不进栈)
(3)遇到“)”,则连续出栈输出,直到遇到“(”为止(“(”出栈但不输出);否则
(4)若是其它操作符,则与栈顶的操作符比较优先级;若优先级小于栈顶的优先级,如a*b+c,说明*号所需的两个数a和b已经输出,则把*号弹出,如此反复,直到栈外优先级比栈内优先级高,最后把+号进栈.若优先级大于栈顶优先级,如a+b*c,说明*号所需的两个数b和c还有一个没有输出,所以把*号进栈.
(5)转(1);
(6)输出栈中剩余操作符(#除外)。

2.转换的关键:确定操作符的优先级
优先级决定操作符是进栈或出栈。
操作符在栈内外的优先级应该不同,以体现中缀表达式同优先级操作符从左到右的计算要求。“(”的优先级在栈外最高,但进栈后应该比除#外的操作符低,便于括号内的其它操作符进栈。
isp——栈内优先级
icp——栈外优先级
操作符 # ( */ +- )
icp 0 7 4 2 1
isp 0 1 5 3 7




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值