用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邮件专题
Oct 09 PHP
PHP4 与 MySQL 交互使用
Oct 09 PHP
php 图像函数大举例(非原创)
Jun 20 PHP
PHP 开发环境配置(测试开发环境)
Apr 28 PHP
$_GET['goods_id']+0 的使用详解
Jun 06 PHP
php删除数组元素示例分享
Feb 17 PHP
PHP实现将textarea的值根据回车换行拆分至数组
Jun 10 PHP
PHP实现添加购物车功能
Mar 06 PHP
PHP ADODB实现事务处理功能示例
May 25 PHP
PHP实现PDO操作mysql存储过程示例
Feb 13 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
Apr 09 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 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
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
2012/07/23 PHP
php中计算程序运行时间的类代码
2012/11/03 PHP
php实现求相对时间函数
2015/06/15 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
用jquery来定位
2007/02/20 Javascript
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
常用DOM整理
2015/06/16 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
2016/07/07 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
Python Tkinter GUI编程入门介绍
2015/03/10 Python
Python端口扫描简单程序
2016/11/10 Python
django 删除数据库表后重新同步的方法
2018/05/27 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
opencv python如何实现图像二值化
2020/02/03 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
OpenCV 表盘指针自动读数的示例代码
2020/04/10 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
Python第三方包PrettyTable安装及用法解析
2020/07/08 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
小学生作文评语大全
2014/04/21 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
美容院员工规章制度
2015/08/05 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP
Python OpenGL基本配置方式
2022/05/20 Python