php实现简单表达式运算算法
求一个表达式运算结果
$char=array(); //符号栈 $number=array(); //数字栈 $charnum=array('+'=>1,'-'=>1,'*'=>2,'/'=>2);//规定符号栈的优先级 $arr='4 + 2 * 5 - 7 / 11'; // 4 2 5*+7 11/- 逆波兰表达式 $arr=preg_replace('/(\\s+)/','',$arr); $len=strlen($arr); $flag=0; $j=0; for($i=0;$i<$len;$i++) { if(is_numeric($arr[$i])) { if(!isset($number[$j])) $number[$j]=0; if($flag==1) $number[$j]=$number[$j]*10+$arr[$i]; if($flag!=1) {$number[$j]=(int)$arr[$i];} $flag=1; } if(!is_numeric($arr[$i]) && is_string($arr[$i])) { $char[]=$arr[$i]; $j++; $flag=2; } } function do_operation($data1,$data2,$symbol) { switch($symbol) { case '+': return (double)($data1+$data2); case '-': return (double)($data1-$data2); case '*': return (double)($data1*$data2); case '/': return (double) ($data1/$data2); } } function change_number(&$arr,$pos,$temp) { $i=$pos;$arr[$i]=$temp;$i++; $len=count($arr)-1; while($i<$len) { $arr[$i]=$arr[$i+1]; $i++; } unset($arr[$i]); } function change_char(&$char,$pos) { $i=$pos;$len=count($char)-1; while($i<$len) { $char[$i]=$char[$i+1]; $i++; } unset($char[$i]); } function char_value($char,$charnum) { if(array_key_exists($char,$charnum)) return $charnum[$char]; } $x1=$x2=0;//两个指针 $result=0; $lennum=count($number);$lenchar=count($char); while($x1<$lennum && $x2<$lenchar) { //主要是通过符号来进行运算 所以符号的优先级很重要 if(isset($char[$x2])&& isset($char[$x2+1]) && char_value($char[$x2],$charnum)>=char_value($char[$x2+1],$charnum)) { if($result==0){ $result=do_operation($number[$x1],$number[$x1+1],$char[$x2]); $x1++; $x2++; } else{ $result=do_operation($result,$number[$x1],$char[$x2]); $x1++; $x2++; } }//到只剩一个符号的时候 else if($x2==($lenchar-1)){ $result=do_operation($result,$number[$x1+1],$char[$x2]); break; } else { //符号栈要去掉一个符号 然后向前挪动一位 数字栈两位变一位向前挪动一位 $temp=do_operation($number[$x1+1],$number[$x1+2],$char[$x2+1]); change_number($number,$x1+1,$temp); change_char($char,$x2+1); $lennum=count($number); $lenchar=count($char); var_dump($number); var_dump($char); //if($x2==1) {echo $lenchar;echo $x1;exit;} } } echo $result;
ログイン後にコピー
以上就是php实现简单表达式运算算法的内容,更多相关内容请关注PHP中文网(www.php.cn)!
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事
レポ:チームメイトを復活させる方法
1 か月前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
2週間前
By 尊渡假赌尊渡假赌尊渡假赌
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
4週間前
By 尊渡假赌尊渡假赌尊渡假赌
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD
R.E.P.O.ファイルの保存場所:それはどこにあり、それを保護する方法は?
4週間前
By DDD

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック
Gmailメールのログイン入り口はどこですか?
7356
15


Java チュートリアル
1628
14


CakePHP チュートリアル
1353
52


Laravel チュートリアル
1265
25


PHP チュートリアル
1214
29



PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
