ホームページ php教程 php手册 用PHP实现的四则运算表达式计算实现代码

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

Jun 06, 2016 pm 08:38 PM
算術 表現

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

PHP实现:
代码如下:
/**
* 计算四则运算表达式
*/
error_reporting(E_ALL);
$exp = '(1+2*(3+5)/4)*(3+(5-4)*2)';
$arr_exp = array();
for($i=0;$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;
}
}

这个实现方式中使用了两个堆栈,一个用来存储数字,一个用来存储运算符,遇到括号以后就递归进入括号内运算,实现方式有点笨拙,后面补充一下“逆波兰表达式”的算法实现。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python 式の構文エラーを解決するにはどうすればよいですか? Python 式の構文エラーを解決するにはどうすればよいですか? Jun 24, 2023 pm 05:04 PM

Python 式の構文エラーを解決するにはどうすればよいですか?

Go言語で書かれた四則演算ライブラリ:シンプルで効率的な数学計算ツール Go言語で書かれた四則演算ライブラリ:シンプルで効率的な数学計算ツール Dec 23, 2023 am 11:49 AM

Go言語で書かれた四則演算ライブラリ:シンプルで効率的な数学計算ツール

C および C++ では、式またはステートメントを区切るためにカンマが使用されます。 C および C++ では、式またはステートメントを区切るためにカンマが使用されます。 Sep 09, 2023 pm 05:33 PM

C および C++ では、式またはステートメントを区切るためにカンマが使用されます。

Go言語の四則演算の簡単な入門ガイド Go言語の四則演算の簡単な入門ガイド Feb 19, 2024 pm 12:18 PM

Go言語の四則演算の簡単な入門ガイド

C言語の指数関数式入門 C言語の指数関数式入門 Feb 18, 2024 pm 01:11 PM

C言語の指数関数式入門

Go 言語が四則演算を実装する方法 Go 言語が四則演算を実装する方法 Dec 21, 2023 pm 04:46 PM

Go 言語が四則演算を実装する方法

Javaのラムダ式 Javaのラムダ式 Jun 09, 2023 am 10:17 AM

Javaのラムダ式

Go 言語を使用して基本的な算術演算子を実装する Go 言語を使用して基本的な算術演算子を実装する Dec 23, 2023 pm 02:52 PM

Go 言語を使用して基本的な算術演算子を実装する

See all articles