-1

这是代码,我在 HTML 部分中的所有内容是<p></p>

选项是onDomreadyjQuery 1.9.1

var operators = '+-*/()';

Array.prototype.peek = function () {
    return this[this.length - 1];
};

function isDigit(c) {
    return !isOperator(c);
}

function isOperator(c) {
    return operators.indexOf(c) >= 0;
}

function operatorPriority(operator) {
    return operator === '*' || operator === '/' ? 1 : 0;
}

function comparePriority(a, b) {
    return operatorPriority(a) >= operatorPriority(b);
}

function toPostfix(infix) {
    var stack = [];
    stack.push('(');
    infix += ')';

    var count = 0;
    var postfix = "";

    while (stack.length > 0) {
        var c = infix.charAt(count++);
        if (isDigit(c)) {
            postfix += c;
        } else if (c === '(') {
            stack.push(c);
        } else if (isOperator(c)) {
            while (isOperator(stack.peek())) {
                if (comparePriority(stack.peek(), c)) {
                    postfix += stack.pop();
                } else {
                    break;
                }
            }
            stack.push(c);
        } else { // assumed )
            while (stack.peek() !== '(') {
                postfix += stack.pop();
            }
            stack.pop();
        }
    }
    return postfix;
}

var infix = "2+4+5";
$('p').text(toPostfix(infix));
4

1 回答 1

1

在您的 while 循环中,您必须添加一个条件count

while (stack.length > 0 && count <= infix.length) {
    ...
}
于 2013-04-17T14:36:12.350 回答