首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用反向波兰语表示法

用反向波兰语表示法
EN

Stack Overflow用户
提问于 2019-09-10 20:24:22
回答 1查看 278关注 0票数 1

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

代码语言:javascript
运行
复制
Input: 11+((10-2)*6)+7
Infix-to-Postfix-----------
Output: 11102-6*+7+  

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

EN

回答 1

Stack Overflow用户

发布于 2019-09-11 00:50:53

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

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

例如,如果使用简单的空格,则RPN格式为

代码语言:javascript
运行
复制
11 10 2 -6 *+7 +

当你在你的RPN赋值器中读到这一点时,使用分隔符作为"push integer“信号(或运算符)。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57870745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档