您好,欢迎访问一九零五行业门户网

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

题目要求:有一个四则运算的字符串表达式,编写一个函数,计算四则运算的结果
php实现:
1 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 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 }
这个实现方式中使用了两个堆栈,一个用来存储数字,一个用来存储运算符,遇到括号以后就递归进入括号内运算,实现方式有点笨拙,后面补充一下“逆波兰表达式”的算法实现。
http://www.bkjia.com/phpjc/478722.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/478722.htmltecharticle题目要求:有一个四则运算的字符串表达式,编写一个函数,计算四则运算的结果 php实现: 1 ?php 2 3 /** 4 * 计算四则运算表达式 5 */ 6 7 er...
其它类似信息

推荐信息