Implementierung einer einfachen Rechnerfunktion mit vier arithmetischen Operationen in PHP

小云云
Freigeben: 2023-03-17 21:00:02
Original
3595 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich die von PHP implementierte einfache Rechenfunktion für vier arithmetische Operationen vorgestellt und die von PHP implementierte Ausdrucksberechnungsfunktion anhand von Beispielen analysiert allen helfen.

Da die Arrays von PHP „natürlich“ Stack-Eigenschaften haben, werden hier direkt Arrays verwendet. Natürlich können Sie die Stapelstruktur zum Schreiben verwenden, das Prinzip ist dasselbe.

Senior (ein polnischer Wissenschaftler) berechnet vier reguläre Ausdrücke mit Klammern unter Verwendung des umgekehrten polnischen Algorithmus (Suffix-Ausdrucksmethode). Einfach unglaublich! ! Tatsächlich ist das Codieren nicht schwierig. Was schwierig ist, ist die Anleitung des Algorithmus. Bevor Sie codieren können, müssen Sie den Algorithmus verstehen.

<?php
$num_arr = array();// 声明数字栈
$op_arr = array();// 声明符号栈
$str = "10+6*2-18/2-2";
preg_match_all(&#39;/./&#39;, $str, $arr);// 把运算串分解成每个字符到$arr数组
$str_arr = $arr[0];
$length = count($str_arr);
$pre_num = &#39;&#39;;
// 开始入栈
for($i=0; $i<$length; $i++){
  $val = $str_arr[$i];
  // 数字
  if (is_numeric($val)){
    $pre_num .= $val;// 兼顾下一个字符可能也是数字的情况(多位数)
    if($i+1>=$length || isOper($str_arr[$i+1])){// 下一个是运算符或者到头了,则把数字塞进数字栈
      array_push($num_arr, $pre_num);
      $pre_num = &#39;&#39;;
    }
  // 符号判断优先级,选择是否入栈
  } else if (isOper($val)){
    if (count($op_arr)>0){
      // 判断优先级,只要不大于符号栈顶的优先级,就开始计算,直到优先级大于了栈顶的,计算后才再把这个运算符入栈
      while (end($op_arr) && priority($val) <= priority(end($op_arr))){
        calc($num_arr, $op_arr);
      }
    }
    array_push($op_arr, $val);
  }
}
//echo &#39;<pre class="brush:php;toolbar:false">&#39;;
//print_r($num_arr);
//print_r($op_arr);
// 计算栈里剩余的
while(count($num_arr)>0){
  calc($num_arr, $op_arr);
  if (count($num_arr)==1){
    $result = array_pop($num_arr);
    break;
  }
}
echo $str,&#39; = &#39;, $result;
// 计算,获取数字栈的两个数,符号栈顶的运算符
function calc(&$num_arr, &$op_arr){
  if (count($num_arr)>0){
    $num1 = array_pop($num_arr);
    $num2 = array_pop($num_arr);
    $op = array_pop($op_arr);
    if ($op==&#39;*&#39;) $re = $num1*$num2;
    if ($op==&#39;/&#39;) $re = $num2/$num1;// 这里注意顺序,栈是先进后出,所以$num2是被除数
    if ($op==&#39;+&#39;) $re = $num2+$num1;
    if ($op==&#39;-&#39;) $re = $num2-$num1;
    array_push($num_arr, $re);
  }
}
// 获取优先级
function priority($str){
  if ($str == &#39;*&#39; || $str == &#39;/&#39;){
    return 1;
  } else {
    return 0;
  }
}
// 判断是否是运算符
function isOper($oper){
  $oper_array = array(&#39;+&#39;,&#39;-&#39;,&#39;*&#39;,&#39;/&#39;);
  if (in_array($oper, $oper_array)){
    return true;
  }
  return false;
}
Nach dem Login kopieren

Laufergebnisse:

10+6*2-18/2-2 = 11
Nach dem Login kopieren

Verwandte Empfehlungen:

Erweiterter Rechner implementiert in PHP basierend auf Stack

Funktionsbeispiel eines erweiterten Rechners implementiert in PHP (basierend auf Stack)

Detaillierte Erläuterung des Beispielcodes zur Implementierung der Online-Rechnerfunktion in PHP

Das obige ist der detaillierte Inhalt vonImplementierung einer einfachen Rechnerfunktion mit vier arithmetischen Operationen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!