Heim  >  Artikel  >  Backend-Entwicklung  >  算式的解析算法

算式的解析算法

WBOY
WBOYOriginal
2016-07-29 08:55:341369Durchsuche

这几天没事就用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>

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

Stellungnahme:
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