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