gpt4 book ai didi

java - 坚持逆波兰符号

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:51:43 26 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

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

11 10 2 -6 *+7 +

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

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

关于java - 坚持逆波兰符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57870745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com