Heim > Backend-Entwicklung > PHP-Tutorial > 算式的解析算法

算式的解析算法

WBOY
Freigeben: 2016-07-29 08:55:34
Original
1392 Leute haben es durchsucht

这几天没事就用php写了一个解析程序。

例如:(21*12-23-(21+14-(21-31/3+(14-21*12-14))+54)-21)+21*25-22*26

然后解析的结果就是:-169.33。

现将代码贴出,如果有不妥的地方还请各位程序员朋友们指出。

if(isset($_GET['sizhi'])){
    $sizhi=$_GET['sizhi'];
    if(!checkSizhi($sizhi)){
      echo('算式不合法,检查括号是否配对');
    }else{
     $sizhi=priority($sizhi);
     echo(calculate($sizhi)); 
    }
}
 //检查算式是否合法
function checkSizhi($sizhi){
    $Amatch=array();
    $pattern='/((\d|!)\()|([-\+\*\/]\))|[^-\+\*\/!\d\(\)]/';
    if(preg_match($pattern,$sizhi,$Amatch)>0){
      echo('不合法的元素:');
      print_r($Amatch);
      return false;
    }else{
      $kuohao=0;
      for($i=0,$k=strlen($sizhi);$i0){
     echo("阶乘阶段出问题,请改算式");
     exit();
  }else{
    //替换所有阶乘的部分
   $sizhi=preg_replace_callback($par,function($siz){
          return calculateFactorial($siz[0]);
    } 
      , $sizhi);
  }
  //交换符号与数字并计算  
  return change($sizhi);
}
//计算阶乘
function calculateFactorial($sizhi){
      for ($i=0; $i <strlen if for return calculatefactorial function change preg_match_all sum substr calernu calut switch case>0){
            $str=$array[0];
           }
         return $str;
    }
}</strlen>
Nach dem Login kopieren

以上就介绍了算式的解析算法,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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