欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

算式的解析算法

程序员文章站 2022-05-24 13:31:38
...
这几天没事就用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 0){
            $str=$array[0];
           }
         return $str;
    }
}

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