【C++】中缀表达式求值


前言 & 剧情

任务背景:

话说,从前计算机界有三大帮派,一个叫做后缀表达式,有一个叫做波兰的帝国撑腰,也叫作波兰表达式;一个叫做前缀表达式,和后缀表达式是死对头,专门和波兰对着干,也叫作逆波兰表达式;还有一个小弟叫作中缀表达式的,在电脑计算中身位卑微,然而广泛应用于一般生活中。——到现在,胜负不分。
中缀表达式在计算机界身位卑微,为了维护宇宙的秩序平衡,你决定帮TA一把……

主线任务:拯救中缀表达式 已解锁。

NPC交流阶段:
中缀表达式:大哥帮帮我,他们都说前缀和后缀表达式很好算,说我除了看得懂啥用没有,又难算,写的还多,我该怎么办呐……QAQ
你:相信我,为了宇宙平衡,我一定会帮你的!!(还好只有加减乘除)

思考

嗯,有哪些方法呢?
要么,把中缀表达式转成后缀或前缀表达式;
要么,就直接求值。

作为一个热爱暴力的好青年,当然使用直接求值法。
想要康中缀转后缀的朋友们可以康康这里

实现方法

学习Python


上面那句话是谁说的?鄙视竞赛中的py党。
首先,因为要一算括号中的答案,又可能有括号套括号,很容易想到递归。
但是——

递归这种东西,是一般人的脑子想象不出来的。 ——某老师

放弃……

换个思路,俗话说得好,可以不用函数解决任何题目,(我一直认为,面向数据编程是最好的形式,)因为dfs是递归实现的,也可以用栈实现,所以——为什么不想一想用栈实现?

立马动手。
对一个字符,有2种情况一种是数,一种是运算符号。
数好处理,就一位一位加上。
运算符号要考虑优先级: ( , ) > ∗ , / > + , − (,)>*,/>+,- (,)>,/>+,
可以考虑遇到乘除先处理连乘除的情况,遇到括号就处理这一对括号里的所有情况。
开两个栈,一个记录遇到的运算符,一个记录参与运算的数。
遇到非右括号的字符就放进运算符的栈中,读完了一个数就放进数的栈中,然后遇到了相应的符号就处理一下就好啦。

具体实现见代码……

参考代码

Python newbie!!

print(eval(input()))

算了这才是C++……

#define int long long
long
  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值