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

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

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

 

PHP实现:

 1  <? php
 2 
 3  /* *
 4   * 计算四则运算表达式
 5    */
 6 
 7  error_reporting ( E_ALL );
 8 
 9  $exp   =   ' (1+2*(3+5)/4)*(3+(5-4)*2) ' ;
10  $arr_exp   =   array ();
11 
12  for ( $i = 0 ; $i < strlen ( $exp ); $i ++ ){
13       $arr_exp []  =   $exp [ $i ];
14  }
15  $result   =  calcexp(  array_reverse ( $arr_exp ) );
16  echo   $exp   .   ' = '   .   $result ;
17 
18  function  calcexp(  $exp  ){
19       $arr_n   =   array ();
20       $arr_op   =   array ();
21      
22       while ( ( $s   =   array_pop $exp  ))  !=   ''  ){
23           if $s   ==   ' ( '  ){
24               $temp   =   array ();  $quote   =   1 $endquote   =   0 ;
25               while ( ( $t   =   array_pop ( $exp ))  !=   ''  ){
26                   if $t   ==   ' ( '  ){
27                       $quote ++ ;
28                  }
29                   if $t   ==   ' ) '  ){
30                       $endquote ++ ;
31                       if $quote   ==   $endquote  ){
32                           break ;
33                      }
34                  }
35                   array_push ( $temp ,   $t );
36              }
37               $temp   =   array_reverse ( $temp );
38               array_push ( $arr_n ,  calcexp( $temp ) );
39          } else   if $s   ==   ' * '   ||   $s   ==   ' / '  ){
40               $n2   =   array_pop ( $exp );
41               if $n2   ==   ' ( '  ){
42                   $temp   =   array ();  $quote   =   1 $endquote   =   0 ;
43                   while ( ( $t   =   array_pop ( $exp ))  !=   ''  ){
44                       if $t   ==   ' ( '  ){
45                           $quote ++ ;
46                      }
47                       if $t   ==   ' ) '  ){
48                           $endquote ++ ;
49                           if $quote   ==   $endquote  )
50                               break ;
51                      }
52                       array_push ( $temp ,   $t );
53                  }
54                   $temp   =   array_reverse ( $temp );
55                   $n2   =  calcexp( $temp );
56              }
57              
58               $op   =   $s ;
59               $n1   =   array_pop ( $arr_n );
60              
61               $result   =  operation( $n1 ,   $op ,   $n2 );
62               array_push ( $arr_n ,   $result );
63          } elseif $s   ==   ' + '   ||   $s   ==   ' - '  ){
64               array_push ( $arr_op ,   $s );
65          } else {
66               array_push ( $arr_n ,   $s );
67          }
68      }
69      
70       $n2   =   array_pop ( $arr_n );
71       while ( ( $op   =   array_pop ( $arr_op ))  !=   ''  ){
72           $n1   =   array_pop ( $arr_n );
73           $n2   =  operation( $n1 ,   $op ,   $n2 );
74      }
75      
76       return   $n2 ;
77  }
78 
79  function  operation(  $n1 ,   $op ,   $n2  ){
80       switch  ( $op ) {
81           case   ' + ' :
82               return   intval ( $n1 +   intval ( $n2 );
83               break ;
84           case   ' - ' :
85               return   intval ( $n1 -   intval ( $n2 );
86               break ;
87           case   ' * ' :
88               return   intval ( $n1 *   intval ( $n2 );
89               break ;
90           case   ' / ' :
91               return   intval ( $n1 /   intval ( $n2 );
92               break ;
93     }

94 } 

 

这个实现方式中使用了两个堆栈,一个用来存储数字,一个用来存储运算符,遇到括号以后就递归进入括号内运算,实现方式有点笨拙,后面补充一下“逆波兰表达式”的算法实现。 

相关文章
|
9月前
|
PHP
php计算时间差转化时间戳函数strtotime
php计算时间差转化时间戳函数strtotime
46 0
|
9月前
|
SQL JSON 关系型数据库
php执行语句在MySQL批量插入大数据量的解决方案及计算程序执行时间(大数据量、MySQL语句优化)
php执行语句在MySQL批量插入大数据量的解决方案及计算程序执行时间(大数据量、MySQL语句优化)
197 1
|
9月前
|
PHP
php清洗数据实战案例(4):按照关联数组相同值名称进行筛选后对不同的指标予以合并计算的解决方案
php清洗数据实战案例(4):按照关联数组相同值名称进行筛选后对不同的指标予以合并计算的解决方案
39 0
|
9月前
|
定位技术 PHP
php基于百度地图封装的对象类实现计算地图上两点间的距离和地理编码
php基于百度地图封装的对象类实现计算地图上两点间的距离和地理编码
60 0
|
9月前
|
PHP
php计算两个坐标点之间的距离的类
php计算两个坐标点之间的距离的类
72 0
|
9月前
|
关系型数据库 MySQL 定位技术
php实现mysql计算经纬度坐标距离的筛选附近范围POI的解决方案
php实现mysql计算经纬度坐标距离的筛选附近范围POI的解决方案
126 0
|
9月前
|
PHP
PHP中的函数式编程和Lambda表达式
PHP是一种广泛使用的脚本语言,自从引入了匿名函数和闭包的概念后,函数式编程在PHP中的应用逐渐流行起来。本文将介绍PHP中的函数式编程和Lambda表达式的概念,并提供具体的代码实现、运行结果和代码解读。
122 0