- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在做作业:当我们输入像 -(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/
注意!! 了解波兰语或任何其他具有强烈屈曲性的自然语言,最好是带有格系统(例如德语),将有很大帮助回答这个问题。特别是,波兰语变格系统与其他斯拉夫语言系统非常相似,例如:俄语、捷克语、塞尔维亚语等。
我正在用 C 开发一个嵌入式应用程序,它必须符合 MISRA标准。它将涉及使用包含波兰语符号 (ąęćłńśźż) 的字符串。我尝试使用八进制/十六进制转义序列对它们进行编码: dictionary[
我是一名优秀的程序员,十分优秀!