首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中的错误RPN

PHP中的错误RPN
EN

Stack Overflow用户
提问于 2017-12-08 00:36:08
回答 1查看 118关注 0票数 0

我试图使用RPN,以便在PHP中做一个简单的计算器。为了做到这一点,我尝试遵循wiki描述和几个教程,但目前我遇到了第一个操作数的一个问题。我不能用end()来分配它。

我的问题来自于行$nb1 = end($stack);

代码语言:javascript
复制
<?php

function add($stack, $nb1, $nb2)
{
    array_push($stack, $nb1 + $nb2);
    $result = $nb1 + $nb2;
    echo $nb1 . ' + ' . $nb2 . ' = ' . $result . "\n";
}

function sub($stack, $nb1, $nb2)
{
    array_push($stack, $nb1 - $nb2);
    $result = $nb1 - $nb2;
    echo $nb1 . ' - ' . $nb2 . ' = ' . $result . "\n";
}

function div($stack, $nb1, $nb2)
{
    array_push($stack, $nb1 / $nb2);
    $result = $nb1 / $nb2;
    echo $nb1 . ' / ' . $nb2 . ' = ' . $result . "\n";
}

function mul($stack, $nb1, $nb2)
{
    array_push($stack, $nb1 * $nb2);
    $result = $nb1 * $nb2;
    echo $nb1 . ' * ' . $nb2 . ' = ' . $result . "\n";
}

function calc($input)
{
$stack = array();
$token = explode(" ", trim($input));
$count = count($token);
// echo $count . "\n";
// print_r($token);

for ($i = 0; $i < $count; $i++) {
    $tokenNUm = "";

    if (is_numeric($token[$i])) {
        array_push($stack, $token[$i]);
        print_r($token);
    } else {
        $nb2 = end($stack);
        array_pop($stack);
        $nb1 = end($stack);
        array_pop($stack);
        echo "nb1 : ". $nb1 . "\n";
        echo "nb2 : ". $nb2 . "\n";

        switch($token[$i]) {
        case '+':
            add($stack, $nb1, $nb2);
        case '-':
            sub($stack, $nb1, $nb2);
        case '/':
            div($stack, $nb1, $nb2);
        case '*':
            mul($stack, $nb1, $nb2);
        default:
            die('Error');
        }
    }
    return end($stack);
    }
}

echo "Final result = " . calc($argv[1]) . "\n";
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-08 03:41:10

不要太深地钻研逻辑,我可以指出你犯的几个错误:

  1. 您的return end($stack);for循环中。基本上,循环只运行第一次迭代,然后退出函数。
  2. 您必须在每个break;块中放置case,否则它将执行switch块中的每个函数,并错误地死去: 开关($token$i){大小写'+':加法($stack,$nb1,$nb2);中断;大小写'-':sub($stack,$nb1,$nb2);break;case '/':div($stack,$nb1,$nb2);break;case '*':mul($stack,$nb1,$nb2);中断;默认值: die('Error');}

希望这些能帮上忙。

更新

忘记提到您必须像这样运行php rpn.php "1 + 2"脚本,因为您使用的是$argv[1]。假设rpn.php是文件的名称。这是演示。尝试在没有我的建议的情况下运行它,您将看到不同之处。它没有修正你的算法,但它修正了你所说的错误。

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

https://stackoverflow.com/questions/47706027

复制
相关文章

相似问题

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