【问题标题】:Translating algebraic expressions inorder to postorder in javascript翻译代数表达式以便在javascript中进行后序
【发布时间】:2014-03-15 01:34:38
【问题描述】:

我最近接到了一项任务,使用 javascript 将任何代数表达式从 inorder 转换为 postorder。我一直在按照本指南来理解这个概念,然后尝试创建完成我的任务所需的代码。

http://scriptasylum.com/tutorials/infix_postfix/algorithms/infix-postfix/

这是我的完整示例:

http://wwwlab.iki.his.se/~a12aleny/PVU/

用于完成任务的代码,忽略cmets,这只是瑞典语的胡言乱语:

var string = "";

function in2Post() {
var equation = document.getElementById('inputin2post').value;
console.log(equation);
var stack = new Stack();
string = "";
for (var i = 0; i < equation.length; i++) {
    var re = /[a-z]/;
    var status = re.test(equation.charAt(i));
    if (status === true) {
        string = string + equation.charAt(i);
    } else {
        if (stack.getlength() == 0) {
            stack.push(equation.charAt(i));
        } else {
            stack.compareOp(equation.charAt(i));
        }
    }
}
for(var i = 0; i <= stack.getlength();i++){
    string = string + stack.pop();
    console.log("bug");


}
var result = document.getElementById("result");
result.innerHTML = string;
console.log(string);

}
function Stack() {
this.stac = new Array();
this.pop = function () {
    return this.stac.pop();
}
this.push = function (item) {
    this.stac.push(item);
}
this.getlength = function () {
    return this.stac.length;
}
this.compareOp = function (operator) {
    var topOfStack = this.stac.pop(); //Hämta operatorn överst i stacken.
    if (operator == "+" || operator == "-") { //Om operatorn som skannas är ett plus eller minus.
        if (topOfStack == "-" || topOfStack == "+" || topOfStack == "*" || topOfStack == "/") { //om operatorn överst i stacken är plus, minus, gånger eller division.
            string = string + topOfStack; //lägg den poppade operatorn i string.
            if (this.stac.length == 0) { //Om stacken är tom.
                this.stac.push(operator); //Lägg på operatorn på stacken.
            } else {
                this.stac.compareOp(operator); //Om den inte är tom, kör funktionen igen med samma operator.
            }

        }
    } else if (operator == "*" || operator == "/") { //Om operatorn är gånger eller division.
        if (topOfStack == "+" || "-") { // om toppen av stacken är plus eller minus.

            this.stac.push(topOfStack);
            this.stac.push(operator); //Lägg operatorn på stacken.

        }
        else if(topOfStack == "*" || topOfStack == "/"){ // Om toppen av stacken är gånger eller division.
            string = string + topOfStack; // Lägg toppen av stacken i strängen.
            if (this.stac.length == 0) { //Om stacken är tom.
                this.stac.push(operator); //Lägg på operatorn på stacken.
            } else {
                this.stac.compareOp(operator); //Om den inte är tom, kör funktionen igen med samma operator.
            }

        }
    }
}
}

请有人解释为什么它没有按预期运行。

【问题讨论】:

    标签: javascript inorder postorder


    【解决方案1】:

    我过去一直在玩它。我在这里完成了:

    你想要 execution_order 函数。

    http://www.ccesp.puc-rio.br/mostrapuc/imgs/logo/mc/mathcaio/math.js

    【讨论】:

    • 您能否以您为此目的创建代码的经验发现我自己的代码中的错误?真的很有帮助!
    • 我使用了一种方法,将括号中的数字括起来,然后再将它们转换为后序。我没有创建算法,我在 C 的维基百科上得到它并将其翻译成 Javascript。我所做的唯一改进是处理一元减法和三角函数。
    猜你喜欢
    • 1970-01-01
    • 2017-01-23
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    相关资源
    最近更新 更多