1

我正在尝试解决一个问题,在该问题中,我必须解决一个给定的表达式,该表达式由同一字符串中的一个或多个初始化组成,没有运算符优先级(尽管带有括号内的子表达式)。所有运算符都有正确的优先级,所以我必须从右到左评估它。我很困惑如何处理给定的问题。详细问题在这里给出:http ://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=108

4

1 回答 1

0

我会给你一些想法来尝试:

首先,您需要递归地评估括号内的值。您想要从嵌套最多到嵌套最少的括号,因此使用匹配括号内没有括号的正则表达式)。将计算结果子串到括号表达式占用的字符串部分。

如果没有括号,那么现在您需要评估运算符。这个问题需要正确优先级的原因是迫使你思考如何回答它——你不能只阅读字符串并进行计算。您必须考虑整个字符串然后开始进行计算,这意味着存储一些描述它的结构。您可以使用多种策略来执行此操作,例如:

- 您可以使用扫描仪或正则表达式对字符串进行标记 - 不断尝试查看字符串中的下一项是否是数字或它是哪个运算符,并将它的类型及其值推送到列表中. 然后,您可以使用某种 case/switch 结构从右到左评估列表,以确定对每个运算符执行的操作(或者每个运算符都与它对数字的作用相关联)。=它本身会将变量名称键映射到值,并在该变量的键下插入值,然后返回(放置到列表中)它产生的值,因此它可以用于另一个赋值。似乎-也可以通过其右侧是否有空格来确定它是减法还是负数。

- 您可以在整个字符串上使用正则表达式,而不是标记化。但是标记化更加健壮。我试图构建一个基于将正则表达式一遍又一遍地应用于整个字符串的计算器,但要正确掌握所有规则非常困难,我不推荐它。

我以前写过一个这样的表达式评估计算器,所以如果你遇到具体问题,可以问我问题。

于 2013-04-13T06:37:16.810 回答