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


Posted in PHP onAugust 02, 2011

PHP实现:

<?php 
/** 
* 计算四则运算表达式 
*/ 
error_reporting(E_ALL); 
$exp = '(1+2*(3+5)/4)*(3+(5-4)*2)'; 
$arr_exp = array(); 
for($i=0;$i<strlen($exp);$i++){ 
$arr_exp[] = $exp[$i]; 
} 
$result = calcexp( array_reverse($arr_exp) ); 
echo $exp . '=' . $result; 
function calcexp( $exp ){ 
$arr_n = array(); 
$arr_op = array(); 
while( ($s = array_pop( $exp )) != '' ){ 
if( $s == '(' ){ 
$temp = array(); $quote = 1; $endquote = 0; 
while( ($t = array_pop($exp)) != '' ){ 
if( $t == '(' ){ 
$quote++; 
} 
if( $t == ')' ){ 
$endquote++; 
if( $quote == $endquote ){ 
break; 
} 
} 
array_push($temp, $t); 
} 
$temp = array_reverse($temp); 
array_push($arr_n, calcexp($temp) ); 
}else if( $s == '*' || $s == '/' ){ 
$n2 = array_pop($exp); 
if( $n2 == '(' ){ 
$temp = array(); $quote = 1; $endquote = 0; 
while( ($t = array_pop($exp)) != '' ){ 
if( $t == '(' ){ 
$quote++; 
} 
if( $t == ')' ){ 
$endquote++; 
if( $quote == $endquote ) 
break; 
} 
array_push($temp, $t); 
} 
$temp = array_reverse($temp); 
$n2 = calcexp($temp); 
} 
$op = $s; 
$n1 = array_pop($arr_n); 
$result = operation($n1, $op, $n2); 
array_push($arr_n, $result); 
}elseif( $s == '+' || $s == '-' ){ 
array_push($arr_op, $s); 
}else{ 
array_push($arr_n, $s); 
} 
} 
$n2 = array_pop($arr_n); 
while( ($op = array_pop($arr_op)) != '' ){ 
$n1 = array_pop($arr_n); 
$n2 = operation($n1, $op, $n2); 
} 
return $n2; 
} 
function operation( $n1, $op, $n2 ){ 
switch ($op) { 
case '+': 
return intval($n1) + intval($n2); 
break; 
case '-': 
return intval($n1) - intval($n2); 
break; 
case '*': 
return intval($n1) * intval($n2); 
break; 
case '/': 
return intval($n1) / intval($n2); 
break; 
} 
}

这个实现方式中使用了两个堆栈,一个用来存储数字,一个用来存储运算符,遇到括号以后就递归进入括号内运算,实现方式有点笨拙,后面补充一下“逆波兰表达式”的算法实现。
PHP 相关文章推荐
php win下Socket方式发邮件类
Aug 21 PHP
编写php应用程序实现摘要式身份验证的方法详解
Jun 08 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 PHP
PHP常用技术文之文件操作和目录操作总结
Sep 27 PHP
php中的观察者模式简单实例
Jan 20 PHP
php通过正则表达式记取数据来读取xml的方法
Mar 09 PHP
PHP的Socket通信之UDP通信实例
Jul 02 PHP
php提交post数组参数实例分析
Dec 17 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 PHP
PHP文件系统管理(实例讲解)
Sep 19 PHP
PHP使用文件锁解决高并发问题示例
Mar 29 PHP
php实现简单四则运算器
Nov 29 PHP
PHP5 的对象赋值机制介绍
Aug 02 #PHP
利用PHP实现智能文件类型检测的实现代码
Aug 02 #PHP
10条PHP高级技巧[修正版]
Aug 02 #PHP
PHP获取url的函数代码
Aug 02 #PHP
给初学者的30条PHP最佳实践(荒野无灯)
Aug 02 #PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
Aug 02 #PHP
linux下使用ThinkPHP需要注意大小写导致的问题
Aug 02 #PHP
You might like
PHP迭代器和迭代的实现与使用方法分析
2018/04/19 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
DOM 基本方法
2009/07/18 Javascript
基于jquery的不规则矩形的排列实现代码
2012/04/16 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
javascript实现密码验证
2015/11/10 Javascript
jquery插件jquery.confirm弹出确认消息
2015/12/22 Javascript
JS使用setInterval实现的简单计时器功能示例
2018/04/19 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
基于Cesium绘制抛物弧线
2020/11/18 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
Python中多个数组行合并及列合并的方法总结
2018/04/12 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
2020/07/02 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
浅析Python的命名空间与作用域
2020/11/25 Python
MANGO官方网站:西班牙芒果服装品牌
2017/01/15 全球购物
应届生求职信写作技巧
2013/10/24 职场文书
网络维护中文求职信
2014/01/03 职场文书
企业员工培训感言
2014/02/26 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
喋血孤城观后感
2015/06/08 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
廉洁自律承诺书2016
2016/03/25 职场文书