用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编写PDF文档生成器
Oct 09 PHP
php防盗链的常用方法小结
Jul 02 PHP
PHP与MySQL开发的8个技巧小结
Dec 17 PHP
兼容firefox,chrome的网页灰度效果
Aug 08 PHP
php 修改、增加xml结点属性的实现代码
Oct 22 PHP
单点登录 Ucenter示例分析
Oct 29 PHP
php模板原理讲解
Nov 13 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
Jan 26 PHP
php结合curl实现多线程抓取
Jul 09 PHP
php与python实现的线程池多线程爬虫功能示例
Oct 12 PHP
php基于闭包实现函数的自调用(递归)实例分析
Nov 11 PHP
在Laravel5中正确设置文件权限的方法
May 22 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生成局部唯一识别码LUID的代码
2012/10/06 PHP
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
2013/06/25 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
Twig模板引擎用法入门教程
2016/01/20 PHP
php array_key_exists() 与 isset() 的区别
2016/10/24 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
2014/06/03 Javascript
Javascript前端UI框架Kit使用指南之kitjs事件管理
2014/11/28 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
2015/03/03 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
JavaScript添加随滚动条滚动窗体的方法
2016/02/23 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
2016/10/25 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
Python selenium实现微博自动登录的示例代码
2018/05/16 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
Python networkx包的实现
2020/02/14 Python
CSS3中Color的一些特性介绍
2012/05/27 HTML / CSS
联想瑞士官方网站:Lenovo Switzerland
2017/11/19 全球购物
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
会计专业自我鉴定范文
2013/12/29 职场文书
小学生家长评语大全
2014/02/10 职场文书
化学专业大学生职业生涯规划范文
2014/09/13 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
故宫导游词
2015/01/31 职场文书
员工试用期转正自我评价
2015/03/10 职场文书
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python
Golang 结构体数据集合
2022/04/22 Golang
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers