这几天没事就用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教程有兴趣的朋友有所帮助。
本文原创发布php中文网,转载请注明出处,感谢您的尊重!