当前位置: 首页 > 知识库问答 >
问题:

一元运算符的中缀到后缀问题

夹谷硕
2023-03-14

我使用以下逻辑实现中缀到后缀的转换,以便稍后对其进行评估。

>

  • 在中缀转换上循环,并在每次迭代中执行以下操作:

    • 如果是空格,请忽略它

    注意:当我遇到-时,我可以确定它是二进制还是一元操作符。如果它是二进制的,我将它添加到堆栈中作为'或-,但是如果它是一进制的,我将它添加为'@'或'$'。

    算法运行良好,除非两个一元运算符相邻。

    例如,“--4”变成了“@4@”,这是错误的。

    怎么了?这个问题的正确解决方案是什么,不会打破其他情况?

  • 共有1个答案

    钱志
    2023-03-14

    看起来您需要更改规则,以便不会弹出连续的一元操作符。也就是说,给定"--4":

    1. -标识为一元操作符,然后按@
    2. 您将下一个-标识为一元操作符,看到堆栈上的操作符也是一元操作符,并推送另一个@
    3. 你看到4,并输出它。
    4. 在字符串的末尾,弹出两个一元操作符,得到4@@。

    当然,一元运算符应该比任何其他运算符具有更高的优先级,因此它们总是在推送任何其他运算符之前被弹出。

     类似资料:
    • 问题内容: 从下面或此处的程序中,为什么最后一次调用要打印该值7? 问题答案: 这将打印出“ 6”,因为它将i加1并返回值。5 + 1 = 6;这是前缀,在操作中使用该编号之前会添加该编号。 这将打印出“ 6”,因为它需要i,存储副本,加1并返回副本。因此,你获得了我当时的价值,但同时又增加了它。因此,你可以打印出旧值,但是它会增加。后缀增量的好处。 然后,当你打印出i时,它会显示i的实际值,因为

    • 日安!我正在使用堆栈实现一个内缀到后缀转换器。当用户输入一个没有括号的内插表达式时,它可以工作;但是当存在括号时,控制台说: 我的问题是在实现排名(堆栈的顶部)。

    • 对于类,我们的任务是使用“抽象中的双链接列表堆栈实现”将中缀表达式转换为后缀。我能够编写一个使用堆栈进行转换的程序,但是双链表的用途是什么?我们将向列表中添加哪些信息节点? 这是作为示例提供给我们的堆栈类。为什么下一个变量是Stack类型?不应该是节点吗? 如果我创建双向链表和节点类,节点对象中有什么数据?

    • 当涉及后缀与中缀中的-/运算符时,我有一个问题。 从任务中 输入字符串5 4 3 10*等价于中缀表达式(5 4) (3 * 10)答案为39。 我明白了。然后我被这句话弄糊涂了。 我们还必须担心非通勤运营商和/。我们将计算后缀字符串4 5-为4-5,同样,将计算4 5/为4/5。 但是当我这么做的时候。。。中缀和后缀的结果不同。 修改第一个示例以包含减法。 中缀 (5 - 4) (3 * 10)

    • 我的讲师给了我一个任务,创建一个程序,使用堆栈将中缀表达式转换为后缀。我制作了堆栈类和一些函数来读取中缀表达式。 但是这个名为inToPos(charstring[])的函数正在创建断点,该函数负责使用堆栈将字符串中缀中的中缀表达式转换为字符串后缀中的后缀表达式。你们能帮帮我,告诉我我做错了什么吗? 这些是我的代码,非常需要您的帮助:) 注:inToPos功能是使用以下算法实现的: 从左到右扫描中

    • 问题内容: 我正在寻找后缀符号表示法的算法,该算法将产生最小数量的括号。 我发现它会产生很多括号:http : //tajendrasengar.blogspot.com/2011/09/postfix-to- infix-algorithm.html 例如 输入: 结果: 问题答案: 如果您确实希望尽可能地减少括号,则需要执行的操作与链接的算法类似。然而… 您应该为中的每个 复合 操作数存储一个