用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 新手入门教程
Aug 03 PHP
php 日期和时间的处理-郑阿奇(续)
Jul 04 PHP
php中防止伪造跨站请求的小招式
Sep 02 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
Nov 07 PHP
php循环语句 for()与foreach()用法区别介绍
Sep 05 PHP
php中的boolean(布尔)类型详解
Oct 28 PHP
PHP基于单例模式实现的mysql类
Jan 09 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
May 05 PHP
php简单读取.vcf格式文件的方法示例
Sep 02 PHP
PHP折半(二分)查找算法实例分析
May 12 PHP
PHP 7.4 新语法之箭头函数实例详解
May 09 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
Dec 02 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 empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
php设计模式 DAO(数据访问对象模式)
2011/06/26 PHP
PHP及Zend Engine的线程安全模型分析
2011/11/10 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
用javascript做拖动布局的思路
2008/05/31 Javascript
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
django反向解析和正向解析的方式
2018/06/05 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
Python如何用filter函数筛选数据
2020/03/05 Python
浅谈Python3中print函数的换行
2020/08/05 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
搞笑创意广告语
2014/03/17 职场文书
公司委托书格式范文
2014/04/04 职场文书
2014年毕业演讲稿范文
2014/05/13 职场文书
留守儿童工作方案
2014/06/02 职场文书
师范生求职信
2014/06/14 职场文书
2014年加油站工作总结
2014/12/04 职场文书
党员个人党性分析材料
2014/12/18 职场文书
新生入学欢迎词
2015/01/26 职场文书
商超业务员岗位职责
2015/02/13 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
pytorch中的model=model.to(device)使用说明
2021/05/24 Python
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python