塞满了反向波兰符号

时间:2019-09-10 12:24:21

标签: java algorithm rpn

我正在做作业:当我们输入-(2 + 3)* 1/5之类的数学表达式时,输出应为-1。经过研究,我发现RPN算法是解决此问题的方法。所以我所做的是将表达式从中缀转换为后缀。但是问题是在某些情况下我无法确定操作数,例如:

Input: 11+((10-2)*6)+7
Infix-to-Postfix-----------
Output: 11102-6*+7+  

“ 11”和“ 10”之间以及“ 10”和“ 2”之间没有空格,因此我无法正确确定每个操作数。 因为我的输出(后缀)是字符串,所以我完全不知道如何解决此问题。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您在发布中描述了问题以及明显的解决方案:您选择的postfix输出破坏了原始表达式中的关键信息。显而易见的解决方案是您必须更改后缀例程以保留该信息。

特别的问题是您不能再将数字字符串解析为原始整数。显而易见的解决方案是保留或插入唯一的分隔符。发出(输出)整数时,请添加某种标点符号。由于RPN仅使用数字和少量的运算符,因此请选择易于检测和阅读的内容:空格,逗号或其他适合您的内容。

例如,如果您使用简单的空格,那么您将使用RPN格式

11 10 2 -6 *+7 +

在RPN评估器中阅读此内容时,请将分隔符用作“推送整数”信号(或运算符)。

请注意,我已经将此分隔符用作每个整数的终止符,而不仅仅是连续整数之间的分隔符。将其作为终端可简化输出处理和输入解析。决定是否添加该符号仅取决于一个令牌(整数),而不是使其成为条件取决于两个相邻的令牌(需要少量上下文状态)。