我有一个作业:当我们输入像-(2 + 3) * 1/5这样的数学表达式时,输出应该是-1。经过研究,我发现RPN算法就是解决这个问题的方法。所以我所做的就是将表达式从中缀转换为后缀。但问题是,在某些情况下,我无法确定操作数,例如:
Input: 11+((10-2)*6)+7
Infix-to-Postfix-----------
Output: 11102-6*+7+
"11“和"10”之间以及"10“和"2”之间没有空格,因此我无法正确确定每个操作数。因为我的输出(后缀)是一个字符串,我完全不知道如何解决这个问题。对此有什么想法吗?
发布于 2019-09-11 00:50:53
您在帖子中描述了问题以及显而易见的解决方案:您选择的后缀输出将销毁原始表达式中的关键信息。显而易见的解决方案是,您必须更改postfix例程以保留该信息。
特别的问题是,您不能再将数字字符串解析为原始整数。显而易见的解决方案是保留或插入唯一的分隔符。当您发出(输出)一个整数时,添加一些标点符号。由于RPN只使用数字和少量运算符,因此请选择您易于检测和阅读的内容:空格、逗号或其他适合您的内容。
例如,如果使用简单的空格,则RPN格式为
11 10 2 -6 *+7 +
当你在你的RPN赋值器中读到这一点时,使用分隔符作为"push integer“信号(或运算符)。
请注意,我将此分隔符用作每个整数的结束字符,而不仅仅是连续整数之间的分隔符。使其成为终端可以简化输出处理和输入解析。决定是否添加该符号仅取决于一个令牌(整数),而不是以两个相邻的令牌为条件(需要少量的上下文状态)。
https://stackoverflow.com/questions/57870745
复制相似问题