用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 用sock技术发送邮件的函数
Jul 21 PHP
php 来访国内外IP判断代码并实现页面跳转
Dec 18 PHP
php对包含html标签的字符串进行截取的函数分享
Jun 19 PHP
php自定义apk安装包实例
Oct 20 PHP
简单谈谈php中的unicode和utf8编码
Jun 10 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
Jul 09 PHP
CodeIgniter针对数据库的连接、配置及使用方法
Mar 03 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
Apr 15 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
PHP正则判断一个变量是否为正整数的方法
Feb 27 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
Jun 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
HTML node相关的一些资料整理
2010/01/01 Javascript
jquery $.getJSON()跨域请求
2011/12/21 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
2013/10/22 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
原生JS实现图片左右轮播
2016/12/30 Javascript
基于原生js运动方式关键点的总结(推荐)
2017/10/01 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
jQuery中图片展示插件highslide.js的简单dom
2018/04/22 jQuery
微信小程序实现笑脸评分功能
2018/11/03 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
小程序实现搜索框
2020/06/19 Javascript
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
Python实现可自定义大小的截屏功能
2018/01/20 Python
python psutil库安装教程
2018/03/19 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
Python实现计算字符串中出现次数最多的字符示例
2019/01/21 Python
Python元组常见操作示例
2019/02/19 Python
python 爬取学信网登录页面的例子
2019/08/13 Python
Python文件时间操作步骤代码详解
2020/04/13 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
香港时尚女装购物网站:ZAFUL
2017/07/19 全球购物
TripAdvisor印尼站:全球领先的旅游网站
2018/03/15 全球购物
The Kooples美国官方网站:为情侣提供的法国当代时尚品牌
2019/01/03 全球购物
优秀工会工作者事迹材料
2014/06/02 职场文书
乡镇干部先进性教育活动个人整改措施
2014/09/16 职场文书
悬崖上的金鱼姬观后感
2015/06/15 职场文书
2016高考感言
2015/08/01 职场文书
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL