fork(3) download
  1. <?php
  2.  
  3. /* Я у мамы калькулятор */
  4. $input = '2+10-1+5*5=';
  5. $inputLength = mb_strlen($input);
  6.  
  7. $number = 0; /* Текущее число, которое набирает пользователь */
  8. $result = 0; /* Результат предыдущих действий */
  9. $op = ''; /* Предыдущая операция (+,-,*) */
  10.  
  11. for ($i = 0; $i < $inputLength; $i++) {
  12. $char = mb_substr($input, $i, 1);
  13. if ($char == '*' || $char == '+' || $char == '-' || $char == '=') {
  14. intval($number);
  15. echo "op=[{$op}], result = [{$result}], number = [{$number}], char = [{$char}]\n";
  16.  
  17. if ($op == '+') {
  18. $result = $result + $number;
  19. $number = 0;
  20. $op = $char;
  21.  
  22. //return $result;
  23.  
  24. }
  25. elseif ($op == '-') {
  26. $result = $result - $number;
  27. $number = 0;
  28. $op = $char;
  29.  
  30. //return $result;
  31. }
  32. elseif ($op == '*') {
  33. $result = $result * $number;
  34. $number = 0;
  35. $op = $char;
  36. }
  37. else {
  38. $op = $char;
  39. $result = $number;
  40. $number = 0;
  41. }
  42.  
  43. if ($char == '=') {
  44. echo "Результат: {$result}\n";
  45. exit();
  46. }
  47.  
  48.  
  49.  
  50.  
  51. // $result = $number;
  52. }
  53. elseif (is_numeric($char)) {
  54. $number = $number * 10 + $char;
  55. }
  56. else {
  57. echo "Неверный символ: '$char'\n";
  58. }
  59. }
Success #stdin #stdout 0.02s 24400KB
stdin
Standard input is empty
stdout
op=[], result = [0], number = [2], char = [+]
op=[+], result = [2], number = [10], char = [-]
op=[-], result = [12], number = [1], char = [+]
op=[+], result = [11], number = [5], char = [*]
op=[*], result = [16], number = [5], char = [=]
Результат: 80