fork(1) download
  1. <?php
  2.  
  3. $input = '126+135/8-19-100*2=';
  4. $inputLength = mb_strlen($input);
  5.  
  6. $number = 0; // Текущая цифра
  7. $result = 0; // Результат предидущего действия
  8. $op = ''; // предидущая операция
  9.  
  10. for($i = 0; $i < $inputLength; $i++){
  11. $char = mb_substr($input, $i, 1);
  12. if($char == '+' || $char == '-' || $char == '=' || $char == '*' || $char == '/'){
  13. switch($op){
  14. case '' : // При встрече первого символа заношу цифру в результат
  15. $result = $result + $number;
  16. $number = 0; // Обнуляю после каждой операции
  17. break;
  18. case '+' :
  19. $result = $result + $number;
  20. $number = 0;
  21. break;
  22. case '-':
  23. $result = $result - $number;
  24. $number = 0;
  25. break;
  26. case '*':
  27. $result = $result * $number;
  28. $number = 0;
  29. break;
  30. case '/':
  31. $result = $result / $number;
  32. $number = 0;
  33. break;
  34. }
  35. $op = $char; // Заношу операцию после выполнения предидущей
  36.  
  37. //Когда встречаю "=" вывожу результат
  38. if($op == '='){
  39. echo "Ответ: $result";
  40. }
  41. }elseif(is_numeric($char)){
  42. $number = $number * 10 + floatval($char); //Привожу $char к int и клею к цифре
  43. }else{
  44. echo "Некорректный символ $char";
  45. exit();
  46. }
  47. }
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
Ответ: -172.75