0

PHP スクリプトの解決に行き詰まっています。

一連の命令から結果を計算したい。命令は、1 行ごとにスペースで区切られたキーワードと数字で構成されます。命令はファイルから読み込まれ、結果が画面に出力されます。命令はいくつでも指定できます。命令は演算子 (加算、除算、減算、乗算) です。命令は数学的な優先順位を無視します。最後の指示は「適用」と数字 (「適用 3」など) である必要があります。次に、電卓はその数値で初期化され、前の命令がその数値に適用されます。

[Input]
add 2
multiply 3
apply 3
[Output]
15

【解説】 (3 + 2) * 3 = 15

[Input]
multiply 9
apply 5
[Output]
45

ロジックやコードの例を手伝ってくれる人はいますか?

これは私がこれまでに試したことです:

class calculator {

    public
    function calculate($expression) {
        $expression = str_replace(' ', '', $expression);
        return $this - > exec($expression);
    }
    private
    function exec($expression) {

        switch ($expression['op']) {
            case 'add':
                $r = $expression[0] + $expression[1];
                break;
            case 'subtract':
                $r = $expression[0] - $expression[1];
                break;
            case 'multiply':
                $r = $expression[0] * $expression[1];
                break;
            case 'divide':
                $r = $expression[0] / $expression[1];
                break;

        }
        return $r;
    }

    private
    function parseExpression($expression) {

        $blankspace = preg_match('/\s/', $expression);

        $counter = count($expression);
    }
}
4

1 に答える 1

0

私はこのように行きます:

class Calculator {
    public $result = 0;
    public $queue = Array();
    public parseString($text) {
       // parse input string
       $cmds = explode(" ", $text);
       foreach($cmds as $cmd) {
          $cmd = trim($cmd);
          if(!$cmd) continue; // blank or space, ignoring
          $this->queue[] = $cmd;
       }

       // lets process commands
       $command = false;
       foreach($this->queue as $index => $cmd) { 
           if(is_number($cmd)) {
               // if it's number fire previous command if exists
               if(!$command || !method_exists($this, $command)) {
                   throw new Exception("Unknown command $command");
               }
               $this->$command($index, $cmd);
           }else{
               $command = $cmd;
           }
       }
    }
    public function apply($index, $number) {
       // manipulate $result, $queue, $number
    }
    public function add($index, $number) {
       // manipulate $result, $queue, $number
    }
    public function substract($index, $number) {
       // manipulate $result, $queue, $number
    }
}

$calculator = new Calculator();
$calculator->parseString('...');

それはあなたがそれを行う方法の単なる例ですが、それを行うのはあなたの仕事です:)

、などclearQueueのメソッドを追加する必要があります...clearResultsetResult

于 2013-01-23T02:05:25.970 に答える