php实现一个简单的四则运算计算器(还不支持括号的优先级)。利用栈这种数据结构来计算表达式很赞。

  这里可以使用栈的结构,由于php的数组“天然”就有栈的特性,这里直接就利用了数组。当然可以使用栈结构写,道理一样的。

  前辈(波兰一位科学家)在计算带有括号的四则表达式,利用逆波兰算法(后缀表达法)。简直神了!!其实代码code并不难,难的是算法的指导,要先理解算法,才能编码。

<?php$num_arr = array();// 声明数字栈
$op_arr = array();// 声明符号栈$str = "10+6*2-18/2-2";preg_match_all('/./', $str, $arr);// 把运算串分解成每个字符到$arr数组
$str_arr = $arr[0];$length = count($str_arr);
$pre_num = '';
// 开始入栈
for($i=0; $i<$length; $i++){$val = $str_arr[$i];// 数字if (is_numeric($val)){$pre_num .= $val;// 兼顾下一个字符可能也是数字的情况(多位数)if($i+1>=$length || isOper($str_arr[$i+1])){// 下一个是运算符或者到头了,则把数字塞进数字栈array_push($num_arr, $pre_num);$pre_num = '';}// 符号判断优先级,选择是否入栈} else if (isOper($val)){if (count($op_arr)>0){// 判断优先级,只要不大于符号栈顶的优先级,就开始计算,直到优先级大于了栈顶的,计算后才再把这个运算符入栈while (end($op_arr) && priority($val) <= priority(end($op_arr))){calc($num_arr, $op_arr);}}array_push($op_arr, $val);}
}//echo '<pre>';
//print_r($num_arr);
//print_r($op_arr);// 计算栈里剩余的
while(count($num_arr)>0){calc($num_arr, $op_arr);if (count($num_arr)==1){$result = array_pop($num_arr);break;}
}echo $str,' = ', $result;// 计算,获取数字栈的两个数,符号栈顶的运算符
function calc(&$num_arr, &$op_arr){if (count($num_arr)>0){$num1 = array_pop($num_arr);$num2 = array_pop($num_arr);$op = array_pop($op_arr);if ($op=='*') $re = $num1*$num2;if ($op=='/') $re = $num2/$num1;// 这里注意顺序,栈是先进后出,所以$num2是被除数if ($op=='+') $re = $num2+$num1;if ($op=='-') $re = $num2-$num1;array_push($num_arr, $re);}
}// 获取优先级
function priority($str){if ($str == '*' || $str == '/'){return 1;} else {return 0;}
}// 判断是否是运算符
function isOper($oper){$oper_array = array('+','-','*','/');if (in_array($oper, $oper_array)){return true;}return false;
}

转载于:https://www.cnblogs.com/firstForEver/p/5289200.html

php实现一个简单的四则运算计算器相关推荐

  1. c语言程序设计四则运算,用C语言编程实现一个简单的四则运算计算器

    满意答案 dwjn1d8qqu7 2013.12.31 采纳率:42%    等级:11 已帮助:10300人 #include //函数,读数操作数 int getNextNum() { int r ...

  2. 设计一个简单的四则计算器

    c# using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; u ...

  3. 练习:Python 的字符串处理, 一个朴实无华的四则运算计算器,批量计算小学生四则运算表达式

    Python 官网:https://www.python.org/ Free:大咖免费"圣经"教程< python 完全自学教程>,不仅仅是基础那么简单-- My CS ...

  4. swift for循环_Swift | 实战一个简单的素数计算器demo

    Swift 实战一个简单的素数计算器demo 本期我们来介绍如何用storyboard来实现一个素数计算器demo,storyboard可以明确地知道界面上的组件与代码的关系,而且比起仅用代码写要方便 ...

  5. c# 算式 计算器_C#实现的简单整数四则运算计算器功能示例

    C#实现的简单整数四则运算计算器功能示例 发布时间:2020-08-24 00:11:14 来源:脚本之家 阅读:131 本文实例讲述了C#实现的简单整数四则运算计算器功能.分享给大家供大家参考,具体 ...

  6. 作业1开发一个简单的python计算器

    开发一个简单的python计算器 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568 ...

  7. 程序员成长之旅——Delphi实现一个简单的科学计算器

    程序员成长之旅--Delphi实现一个简单的科学计算器 目标效果 组件以及开发环境 最终呈现 源码GITHUB 目标效果 组件以及开发环境 delphi7版本及以上,这里我用delphi10.4进行的 ...

  8. Vue v-model双向数据绑定和一个简单的整数计算器

    一.v-model双向数据绑定 方法 v-bind - 单向数据绑定(从M到V) v-model - 双向数据绑定 例子 <input type="text" v-bind: ...

  9. 设计一个简单的网页计算器

    设计一个简单的网页计算器 一.代码 <!DOCTYPE html> <html> <head><meta charset="UTF-8"& ...

最新文章

  1. 《Unity着色器和屏幕特效》——2.2 进阶的透明效果
  2. 我用24小时、8块GPU、400美元在云上完成训练BERT!
  3. Linux 多线程同步机制:互斥量、信号量、条件变量
  4. sicily 1259 Sum of Consecutive Primes
  5. 奇怪-正则匹配的test函数
  6. [YTU]_2566( 虚基类练习:动物)
  7. 2020-12-18 Simulink实现ESO(扩张状态观测器)
  8. JavaScript在物联网中的应用
  9. Linux中如何打开trn文件,如何通过trn日志文件恢复SQL Server
  10. Centos7.4系统下安装httpd,mariadb,php7.1环境运行禅道
  11. java筛选法求质数_用筛选法找出N内所有素数(质数)
  12. python--split方法
  13. python 绘制堆积柱状图
  14. Python path
  15. nodeJS笔记参考菜鸟教程
  16. 华为存储iscsi配置_使用华为存储配置ISCSI存储方法和iSCSI建立连接提示目标错误...
  17. 仿节奏大师java_HelloCpp 仿节奏大师Android游戏版本,只实现了击键功能,可以给大家启发. 238万源代码下载- www.pudn.com...
  18. 传奇服务器运行内存占用很高,电脑内存占用一直很高,怎么回事? 电脑内存占用率过高的原因和解决方法...
  19. MySQL(加强)06 -- 触发器(Trigger)
  20. Vant删除图片Vue版本

热门文章

  1. java 18.9_Oracle: Java 11 (18.9 LTS) 正式上线!
  2. c语言 两条线段位置,C++/STL实现判断平面内两条线段的位置关系代码示例
  3. oracle外表日期,三步教会您掌握oracle外表(external table)
  4. xml mysql 模糊查询_mybatis+Spring mysql的模糊查询问题
  5. python 重置索引_python pandas 对series和dataframe的重置索引reindex方法
  6. mysql trace工具_100% 展示 MySQL 语句执行的神器-Optimizer Trace
  7. 异常:com.microsoft.sqlserver.jdbc.SQLServerException: 将截断字符串或二进制数据。
  8. Java BigDecimal stripTrailingZeros()方法与示例
  9. iTunes只能装C盘吗_电脑技巧分享:安装win10系统时系统盘C盘分区多大空间适合?...
  10. C++关键字速查手册