标签: postfix-notation

在python中评估后缀?

我想编写一个函数来评估作为列表传递的后缀表达式。到目前为止,我有:

def evalPostfix(text):
    s = Stack()
    for symbol in text:
        if symbol in "0123456789":
            s.push(int(symbol))
        if not s.is_empty():
            if symbol == "+":
                plus = s.pop() + s.pop()
            if symbol == "-":
                plus = s.pop() - s.pop()
            if symbol == "*":
                plus = s.pop() * s.pop()
            if symbol == "/":
                plus = s.pop() / s.pop()
Run Code Online (Sandbox Code Playgroud)

但我认为我有错误的方法。帮助?

python postfix-notation

3
推荐指数
1
解决办法
2万
查看次数

从中缀更改为后缀有什么好处?

我今天读了书.它介绍了从中缀到后缀的编码算法.有什么好处?提前致谢.

algorithm infix-notation postfix-notation

2
推荐指数
1
解决办法
3644
查看次数

使用最少数量的括号将后缀修复为Infix

我正在寻找中缀符号的算法后缀,它将产生最小数量的括号.

我发现它会产生很多很多括号:http://tajendrasengar.blogspot.com/2011/09/postfix-to-infix-algorithm.html

例如

输入:

<ONP>abcd*/+~
Run Code Online (Sandbox Code Playgroud)

结果:

<INF>~(a+b/(c*d))
Run Code Online (Sandbox Code Playgroud)

java infix-notation postfix-notation

2
推荐指数
1
解决办法
2888
查看次数

在Erlang中,如何在使用递归时返回字符串?

我真的无法更好地表达问题,但这是我的问题:我想使用代码将中缀表达式转换为Erlang中的postfix表达式,但它只写入控制台输出.问题是,我需要返回一个列表或字符串,所以我可以将它用作其他函数中的参数.

-module(foo).
-compile(export_all).

parse(Str) ->    
    {ok, Tokens, _} = erl_scan:string(Str ++ "."),
    {ok, [E]} = erl_parse:parse_exprs(Tokens),
    E.

rpn({op, _, What, LS, RS}) ->
    rpn(LS),
    rpn(RS),
    io:format(" ~s ", [atom_to_list(What)]);
rpn({integer, _, N}) ->
    io:format(" ~B ", [N]).

p(Str) ->
    Tree = parse(Str),
    rpn(Tree),
    io:format("~n").
Run Code Online (Sandbox Code Playgroud)

例如,我想要像这样:

Str = "2 * (3 + 4)".
module:p(Str) =:= "2 3 4 + *".
module:anotherFunction(p(Str)).
Run Code Online (Sandbox Code Playgroud)

erlang rpn infix-notation postfix-notation erl

2
推荐指数
1
解决办法
325
查看次数

python中后缀算法的中缀

对于我的数据结构类,我必须使用 Python 3 创建一个基本的图形计算器。要求是我们必须使用一个基本的 Stack 类。用户以“中缀”形式输入方程,然后我应该将其转换为“后缀”以进行评估和绘图。我在使用中缀到后缀算法时遇到问题。我见过其他可以工作的算法,但我的教授希望它以某种方式完成。这是我到目前为止所拥有的:

def inFixToPostFix():
inFix = '3*(x+1)-2/2'
postFix = ''
s = Stack()
for c in inFix:
    # if elif chain for anything that c can be
    if c in "0123456789x":
        postFix += c
    elif c in "+-":
        if s.isEmpty():
            s.push(c)
        elif s.top() =='(':
            s.push(c)
    elif c in "*/":
        if s.isEmpty():
            s.push(c)
        elif s.top() in "+-(":
            s.push(c)
    elif c == "(":
        s.push(c)
    elif c == ")":
        while s.top() is not '(':
            postFix += s.pop()
        s.pop()
    else: …
Run Code Online (Sandbox Code Playgroud)

algorithm infix-notation postfix-notation python-3.x

2
推荐指数
1
解决办法
3万
查看次数

Postfix和前缀增量导致错误

为什么该代码由于错误而无法编译:

#include <iostream>

using namespace std;

int main()
{
    int i = 0; 
    cout << ++(i++) << " " << i << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

虽然该代码确实编译:

#include <iostream>

using namespace std;

int main()
{
    int i = 0; 
    cout << (++i)++ << " " << i << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不明白这个.从我的观点来看,编译第一个块是非常合理的.表达式++(i ++)只是意味着取i,递增它并输出,然后再递增它.

我不是在询问int溢出中的未定义行为.在写这个问题时我根本不知道r和l值,我不在乎为什么++我被认为是l值,但i ++不是.

c++ increment postfix-notation prefix-notation

2
推荐指数
1
解决办法
463
查看次数

将变量添加到自身,其中后缀增量在Java/c#中不同于在C中

在Java和C#中如果我这样做:

int i=1;
int j= i++ + i;
Run Code Online (Sandbox Code Playgroud)

j是3,即它转换为1 + 2并在加法之前递增i.

但是,在C j中是2,即它转换为1 + 1然后递增i.

C和Java/C#中的内部机制是什么导致表达式的差异?

(同样适用于后期修复.Java/C#变为4,C变为3.)

谢谢.

顺便说一句,最初我认为这将是C答案,因此被Java/C#结果搞糊涂了.

c java postfix-notation

1
推荐指数
1
解决办法
2232
查看次数

多位数字的后缀评估

我为后缀求值器编程,并且我能够正确地为个位数编号。现在我需要了解如何处理多位数,因为我当前的程序将两位数评估为不同的数字。

这是代码:

public class PostfixEvaluation {

    public static void main(String[] args) {
        String postfix = "23+79*-";

        Stack stack = new Stack();

        for (int i = 0; i < postfix.length(); i++) {
            if (postfix.charAt(i) == '+') {
                int v1 = stack.pop();
                int v2 = stack.pop();
                stack.push(v2 + v1);
            } else if (postfix.charAt(i) == '-') {
                int v1 = stack.pop();
                int v2 = stack.pop();
                stack.push(v2 - v1);
            } else if (postfix.charAt(i) == '*') {
                int v1 = stack.pop();
                int v2 = stack.pop(); …
Run Code Online (Sandbox Code Playgroud)

java postfix-notation

1
推荐指数
1
解决办法
7657
查看次数

在从中创建表达式树时是否需要将中缀表示法转换为后缀?

我想创建一个以中缀形式给出表达式的表达式树。是否需要先将表达式转换为后缀,然后再创建树?我知道这在某种程度上取决于问题本身。但假设它是带有未知数和运算符的数学函数的简单表达式,例如:/ * ^ + -。

infix-notation expression-trees postfix-notation data-structures

1
推荐指数
1
解决办法
730
查看次数

试图了解Shunting Yard算法

我正在尝试使用Shunting-yard算法,所以我开始研究它.在这样做的同时,我发现了一些我不太了解的有趣文档:

    // Current token is a number, push 
    // it to stack for numbers. 
    else if(isdigit(tokens[i])){ 
        int val = 0; 

        // There may be more than one 
        // digits in number. 
        while(i < tokens.length() && 
                    isdigit(tokens[i])) 
        { 
            val = (val*10) + (tokens[i]-'0'); 
            i++; 
        } 

        values.push(val); 
    } 
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在里面while,变量val乘以10(val=(val*10)).有人可以帮助我理解为什么算法必须这样做?

c++ postfix-notation shunting-yard

1
推荐指数
1
解决办法
72
查看次数