这几天没事就用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教程有兴趣的朋友有所帮助。