运用php实现四则运算(无括号)

做题时碰到这个难题,思路跟网上说的差不多。两个数组,一个是存放参与运算的数字,另一个数组存放运算符的。我先是生成合理的字符串类型的表达式。

思路:首先遍历整个运算符数组,如果有优先级高的运算符就将它弹出,然后在数字数组中弹出响应的数字。最后运算得到结果,删除这个运算符,然后将这个结果数压到对应的位置上
function calcFromExp($numbers, $ops){
while( (in_array("*", $ops)) || (in_array("/", $ops))  ){
echo "sign * and / calc
";
for($i = 0; $i < count($ops); $i++){
if(strcoll("*", $ops[$i]) == 0){
array_splice($ops, $i, 1);
$temp = $numbers[$i] * $numbers[$i + 1];
array_splice($numbers, $i+1, 1);
$numbers[$i] = $temp;
}else if(strcoll("/", $ops[$i]) == 0){
array_splice($ops, $i, 1);
$temp = ($numbers[$i] / $numbers[$i + 1]);
array_splice($numbers, $i+1, 1);
$numbers[$i] = $temp;
}else{
//如果不是*,/号那么就使i++。(刚开始,卡在这里,如果第一个运算符不是*,/,那么就会进入到死循环的模式)
continue;
}
break;
}
}
print_r($ops);
//print_r($numbers);
 
while( (in_array("+", $ops)) || (in_array("-", $ops))  ){
echo "sign * and / calc
";
for($i = 0; $i < count($ops); $i++){
if(strcoll("+", $ops[$i]) == 0){
array_splice($ops, $i, 1);
$temp = $numbers[$i] + $numbers[$i + 1];
array_splice($numbers, $i+1, 1);
$numbers[$i] = $temp;
}else if(strcoll("-", $ops[$i]) == 0){
if($numbers[$i] < $numbers[$i + 1]){
$numbers[$i] = $numbers[$i] + $numbers[$i + 1];
$numbers[$i + 1 ] = $numbers[$i] - $numbers[$i + 1];
$numbers[$i] = $numbers[$i] - $numbers[$i + 1];
}
echo "
".$numbers[$i].".wwwww".$numbers[$i]."
";
array_splice($ops, $i, 1);
$temp = ($numbers[$i] - $numbers[$i + 1]);
array_splice($numbers, $i+1, 1);
$numbers[$i] = $temp;
}else{
//如果不是*,/号那么就使i++。(刚开始,卡在这里,如果第一个运算符不是*,/,那么就会进入到死循环的模式)
continue;
}
break;
}
}
return $numbers; //其中返回的数组的第一个就是最后的结果
}
$numbers = array(1,2,3);
$ops = array("-","*");
 

运用php实现四则运算(无括号),古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。