用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异步调用socket实现代码
Jan 12 PHP
PHP中__get()和__set()的用法实例详解
Jun 04 PHP
destoon数据库表说明汇总
Jul 15 PHP
php分页函数完整实例代码
Sep 22 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
PHP里的单例类写法实例
Jun 25 PHP
PHP程序员不应该忽略的3点
Oct 09 PHP
PHP中的Trait 特性及作用
Apr 03 PHP
php自动载入类用法实例分析
Jun 24 PHP
PHP登录验证码的实现与使用方法
Jul 07 PHP
visual studio code 调试php方法(图文详解)
Sep 15 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 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
杏林同学录(五)
2006/10/09 PHP
使用PHP导出Redis数据到另一个Redis中的代码
2014/03/12 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
2016/03/17 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
2016/12/23 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
2020/05/29 PHP
Javascript 继承机制的实现
2009/08/12 Javascript
修改好的jquery滚动字幕效果实现代码
2011/06/22 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
Google 爬虫如何抓取 JavaScript 的内容
2017/04/07 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
JavaScript代码调试方法实例小结
2019/01/05 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
详解Typescript里的This的使用方法
2021/01/08 Javascript
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
python实现点对点聊天程序
2018/07/28 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
django模板加载静态文件的方法步骤
2019/03/01 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
database面试题
2013/03/28 面试题
工作决心书范文
2014/03/11 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
元宵节寄语大全
2015/02/27 职场文书
校本研修个人总结
2015/02/28 职场文书
九年级化学教学反思
2016/02/22 职场文书
go xorm框架的使用
2021/05/22 Golang