• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

用PHP实现的四则运算表达式计算实现代码_php技巧

php 搞代码 4年前 (2022-01-26) 12次浏览 已收录 0个评论

PHP实现:

 <BR><?php <BR>/** <BR>* 计算四则运算表达式 <BR>*/ <BR>error_reporting(E_ALL); <BR>$exp = '(1+2*(3+5)/4)*(3+(5-4)*2)'; <BR>$arr_exp = array(); <BR>for($i=0;$i<strlen($exp);$i++){ <BR>$arr_exp[] = $exp[$i]; <BR>} <BR>$result = calcexp( array_reverse($arr_exp) ); <BR>echo $exp . '=' . $result; <BR>function calcexp( $exp ){ <BR>$arr_n = array(); <BR>$arr_op = array(); <BR>while( ($s = array_pop( $exp )) != '' ){ <BR>if( $s == '(' ){ <BR>$temp = array(); $quote = 1; $endquote = 0; <BR>while( ($t = array_pop($exp)) != '' ){ <BR>if( $t == '(' ){ <BR>$quote++; <BR>} <BR>if( $t == ')' ){ <BR>$endquote++; <BR>if( $quote == $endquote ){ <BR>break; <BR>} <BR>} <BR>array_push($temp, $t); <BR>} <BR>$temp = array_reverse($temp); <BR>array_push($arr_n, calcexp($temp) ); <BR>}else if( $s == '*' || $s == '/' ){ <BR>$n2 = array_pop($exp); <BR>if( $n2 == '(' ){ <BR>$temp = array(); $quote = 1; $endquote = 0; <BR>while( ($t = array_pop($exp)) != '' ){ <BR>if( $t == '(' ){ <BR>$quote++; <BR>} <BR>if( $t == ')' ){ <BR>$endquote++; <BR>if( $quote == $endquote ) <BR>break; <BR>} <BR>array_push($temp, $t); <BR>} <BR>$temp = array_reverse($temp); <BR>$n2 = calcexp($temp); <BR>} <BR>$op = $s; <BR>$n1 = array_<a>@本文9来源gao($daima.com搞@代@#码8网^</a><strong>搞代gaodaima码</strong>pop($arr_n); <BR>$result = operation($n1, $op, $n2); <BR>array_push($arr_n, $result); <BR>}elseif( $s == '+' || $s == '-' ){ <BR>array_push($arr_op, $s); <BR>}else{ <BR>array_push($arr_n, $s); <BR>} <BR>} <BR>$n2 = array_pop($arr_n); <BR>while( ($op = array_pop($arr_op)) != '' ){ <BR>$n1 = array_pop($arr_n); <BR>$n2 = operation($n1, $op, $n2); <BR>} <BR>return $n2; <BR>} <BR>function operation( $n1, $op, $n2 ){ <BR>switch ($op) { <BR>case '+': <BR>return intval($n1) + intval($n2); <BR>break; <BR>case '-': <BR>return intval($n1) - intval($n2); <BR>break; <BR>case '*': <BR>return intval($n1) * intval($n2); <BR>break; <BR>case '/': <BR>return intval($n1) / intval($n2); <BR>break; <BR>} <BR>} <BR>


这个实现方式中使用了两个堆栈,一个用来存储数字,一个用来存储运算符,遇到括号以后就递归进入括号内运算,实现方式有点笨拙,后面补充一下“逆波兰表达式”的算法实现。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:用PHP实现的四则运算表达式计算实现代码_php技巧
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址