您好,欢迎访问一九零五行业门户网

算式的解析算法

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

推荐信息