用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会员权限控制实现原理分析
May 29 PHP
优化PHP代码技巧的小结
Jun 02 PHP
深入解析fsockopen与pfsockopen的区别
Jul 05 PHP
浅析linux下apache服务器的配置和管理
Aug 10 PHP
php防止网站被攻击的应急代码
Oct 21 PHP
PHP制作用户注册系统
Oct 23 PHP
php简单复制文件的方法
May 09 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
Jun 09 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
Sep 28 PHP
PHP获取对象属性的三种方法实例分析
Jan 03 PHP
PDO::setAttribute讲解
Jan 29 PHP
Cookie跨域问题解决方案代码示例
Nov 24 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
?繁体转换的class
2006/10/09 PHP
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
Grid得到选择行数据的方法总结
2011/01/17 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
javascript异步编程的4种方法
2014/02/19 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
Python中的CURL PycURL使用例子
2014/06/01 Python
python海龟绘图实例教程
2014/07/24 Python
PyQt5每天必学之布局管理
2018/04/19 Python
Python2.7.10以上pip更新及其他包的安装教程
2018/06/12 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
python3.6环境安装+pip环境配置教程图文详解
2019/06/20 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
获奖的大学生创业计划书
2014/01/05 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
师德师风剖析材料
2014/09/30 职场文书
2014年房地产销售工作总结
2014/12/01 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
JavaScript实现显示和隐藏图片
2021/04/29 Javascript
在JavaScript中如何使用宏详解
2021/05/06 Javascript
Java基础——Map集合
2022/04/01 Java/Android
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android