fork download
  1. <?php
  2.  
  3. function calculate($op, $numberText, $total) {
  4. switch ($op) {
  5. case '':
  6. $total = floatval($numberText);
  7. break;
  8. case '+':
  9. $total += floatval($numberText);
  10. break;
  11. case '-':
  12. $total -= floatval($numberText);
  13. break;
  14. case '*':
  15. $total *= floatval($numberText);
  16. break;
  17. case '/':
  18. $total /= floatval($numberText);
  19. break;
  20. }
  21. return $total;
  22. }
  23.  
  24. $operator = array('+', '-', '*', '=', '/');
  25.  
  26. $input = '-2.43+3.62/2.1*9.02=';
  27. $inputLength = mb_strlen($input);
  28.  
  29. $numberText = '';
  30. $result = 0;
  31. $op = '';
  32.  
  33. for ($i = 0; $i < $inputLength; $i++) {
  34. $char = mb_substr($input, $i, 1);
  35.  
  36. if (in_array($char, $operator)) {
  37. if ($char == '=') {
  38. $result = calculate($op, $numberText, $result);
  39. } else {
  40. $result = calculate($op, $numberText, $result);
  41. }
  42. echo "op = [$op], number = [$numberText], result = [$result], char = [$char]\n";
  43. $numberText = '';
  44. $op = $char;
  45. } elseif (is_numeric($char) || $char == '.') {
  46. $numberText .= $char;
  47. } else {
  48. echo "Непонятный символ. Работа программы прекращена\n";
  49. exit();
  50. }
  51. }
  52.  
  53. echo "{$input}{$result}";
Success #stdin #stdout 0.01s 52488KB
stdin
Standard input is empty
stdout
op = [], number = [], result = [0], char = [-]
op = [-], number = [2.43], result = [-2.43], char = [+]
op = [+], number = [3.62], result = [1.19], char = [/]
op = [/], number = [2.1], result = [0.56666666666667], char = [*]
op = [*], number = [9.02], result = [5.1113333333333], char = [=]
-2.43+3.62/2.1*9.02=5.1113333333333