时间:2021-07-01 10:21:17 帮助过:38人阅读
例如:(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);$i<$k;$i++){
if($sizhi[$i]=="("){
$kuohao++;
}
if($sizhi[$i]==")"){
$kuohao--;
if($kuohao<0)return false;
}
}
if($kuohao!=0)return false;
return true;
}
}
//获得优先权 处理括号内的内容
function priority($sizhi,$start=0){
for($i=$start;$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 结果为:例如 +5-3*8/5 提取 结果为:+5 -3 *8 /5
$par='/[-\+\/\*]-?(\d\.?)+/';
preg_match_all($par, $sizhi, $array);
return sum($array[0]);
}
//计算只含加减乘除的算式
function sum($ziArry){
for($i=0;$i以上就介绍了算式的解析算法,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。