用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 } 

 

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

相关文章
|
8月前
|
API PHP
PHP 8新特性:Match表达式与联合类型实战指南
PHP 8新特性:Match表达式与联合类型实战指南
|
5月前
|
PHP 开发者
PHP计算过去一定时间段内日期范围函数
这个函数为开发者提供了一个快速而简单的方法来获取与当前日期相关的过去时间范围,代码简洁易懂,可复用性高。
165 15
|
8月前
|
安全 PHP
PHP 8的Match表达式:更强大的条件控制
PHP 8的Match表达式:更强大的条件控制
|
PHP
php计算时间差转化时间戳函数strtotime
php计算时间差转化时间戳函数strtotime
237 0
|
SQL JSON 关系型数据库
php执行语句在MySQL批量插入大数据量的解决方案及计算程序执行时间(大数据量、MySQL语句优化)
php执行语句在MySQL批量插入大数据量的解决方案及计算程序执行时间(大数据量、MySQL语句优化)
550 1
|
PHP
php清洗数据实战案例(4):按照关联数组相同值名称进行筛选后对不同的指标予以合并计算的解决方案
php清洗数据实战案例(4):按照关联数组相同值名称进行筛选后对不同的指标予以合并计算的解决方案
132 0
|
定位技术 PHP
php基于百度地图封装的对象类实现计算地图上两点间的距离和地理编码
php基于百度地图封装的对象类实现计算地图上两点间的距离和地理编码
187 0