用PHP实现的四则运算表达式计算实现代码

2015-01-24信息快讯网

题目要求:有一个四则运算的字符串表达式,编写一个函数,计算四则运算的结果

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实现单链表的实例代码
PHP中使用cURL实现Get和Post请求的方法
简单实现限定phpmyadmin访问ip的方法
PHP生成随机用户名和密码的实现代码
PHP常用特殊运算符号和函数总结(php新手入门必看)
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
PHP正则表达式之定界符和原子介绍
php中拷贝构造函数、赋值运算符重载
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
php中邮箱地址正则表达式实现与详解
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
php preg_filter执行一个正则表达式搜索和替换
PHP三元运算符的结合性介绍
第四章 php数学运算
php中获取远程客户端的真实ip地址的方法
PHP5 的对象赋值机制介绍
利用PHP实现智能文件类型检测的实现代码
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
php XPath对XML文件查找及修改实现代码
php模拟socket一次连接,多次发送数据的实现代码
模板引擎正则表达式调试小技巧
php中批量替换文件名的实现代码
php URL验证正则表达式
php入门学习知识点四 PHP正则表达式基本应用
PHP全概率运算函数(优化版) Webgame开发必备
第4章 数据处理-php正则表达式-郑阿奇(续)
php中的三元运算符使用说明
php中获取指定IP的物理地址的代码(正则表达式)
php学习之运算符相关概念
PHP下对字符串的递增运算代码
PHP对字符串的递增运算分析
©2014-2024 dbsqp.com