用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+javascript模拟Matrix画面
Oct 09 PHP
php实现从ftp服务器上下载文件树到本地电脑的程序
Feb 10 PHP
php 静态变量的初始化
Nov 15 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
Sep 12 PHP
for循环连续求和、九九乘法表代码
Feb 20 PHP
php缓冲输出实例分析
Jan 05 PHP
PHP 使用redis简单示例分享
Mar 05 PHP
php常用表单验证类用法实例
Jun 18 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
Sep 11 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 PHP
PHP实现创建以太坊钱包转账等功能
Apr 21 PHP
php去除deprecated的实例方法
Nov 17 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
电脑硬件及电脑配置知识大全
2020/03/17 数码科技
计数器详细设计
2006/10/09 PHP
隐藏你的.php文件的实现方法
2007/03/19 PHP
php运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
php过滤敏感词的示例
2014/03/31 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
2016/03/18 PHP
JavaScript 学习笔记(十五)
2010/01/28 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
jQuery如何封装输入框插件
2016/08/19 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
微信小程序生成分享海报方法(附带二维码生成)
2019/03/29 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Python使用minidom读写xml的方法
2015/06/03 Python
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
python将unicode转为str的方法
2017/06/21 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
2018/01/11 Python
Flask之flask-script模块使用
2018/07/26 Python
详解Python二维数组与三维数组切片的方法
2019/07/18 Python
详解Python在使用JSON时需要注意的编码问题
2019/12/06 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
3个CCIE对一个工程师的面试题
2012/05/06 面试题
预备党员表决心书
2014/03/11 职场文书
医学专业自荐信
2014/06/14 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
2014个人年终工作总结范文
2014/12/15 职场文书
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL
详解MySQL的内连接和外连接
2023/05/08 MySQL