用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 和 MySQL 基础教程(二)
Oct 09 PHP
PHP Memcached + APC + 文件缓存封装实现代码
Mar 11 PHP
php验证手机号码(支持归属地查询及编码为UTF8)
Feb 01 PHP
非常实用的php弹出错误警告函数扩展性强
Jan 17 PHP
页面利用渐进式JPEG来提升用户体验度
Dec 01 PHP
php获取本周星期一具体日期的方法
Apr 20 PHP
解读PHP的Yii框架中请求与响应的处理流程
Mar 17 PHP
简单谈谈PHP中的trait
Feb 25 PHP
详解如何在云服务器上部署Laravel
Jun 30 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
PHP大文件分片上传的实现方法
Oct 28 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原创论坛
2006/10/09 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
php利用cookie实现自动登录的方法
2014/12/10 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
JS 判断代码全收集
2009/04/28 Javascript
JQuery1.4+ Ajax IE8 内存泄漏问题
2010/10/15 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
jQuery 获取页面li数组并删除不在数组中的key
2016/08/02 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
2017/06/16 jQuery
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
vue-cli和v-charts实现可视化图表过程解析
2019/10/08 Javascript
TypeScript之调用栈的实现
2019/12/31 Javascript
Vue3为什么这么快
2020/09/23 Javascript
python3.3实现乘法表示例
2014/02/07 Python
Python程序设计入门(5)类的使用简介
2014/06/16 Python
python基于Tkinter库实现简单文本编辑器实例
2015/05/05 Python
在Django的模型中执行原始SQL查询的方法
2015/07/21 Python
如何利用python查找电脑文件
2018/04/27 Python
基于Python中的yield表达式介绍
2019/11/19 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
小蚁科技官方商店:YI Technology
2019/08/23 全球购物
学习心得体会
2014/01/01 职场文书
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
公司出纳岗位职责
2015/03/31 职场文书
朋友聚会开场白
2015/06/01 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis