ホームページ バックエンド開発 PHPチュートリアル 逆波兰表达式计算,该如何解决

逆波兰表达式计算,该如何解决

Jun 13, 2016 am 10:05 AM
array case data stack

逆波兰表达式计算
最近在整理资料时发现了一些以前收藏的有趣代码
计划逐步将他们移植到 PHP 供有兴趣的人参考

PHP code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/** * 逆波兰表达式计算 * 中缀转后缀 **/function postfix($infix) {    $priority = array( //算符优先级        '+' => 1, '-' => 1,        '*' => 2, '/' => 2,        '(' => 0, ')' => 0,        '.' => 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0        );    $stack = array(); //符号栈    $data = array(); //数值栈     $i = $top = 0;    $last = -1;    $len = strlen($infix);    while($i= $priority[$infix{$i}]) {                    postfix_callback(array_shift($stack), $data);                }                array_unshift($stack, $infix{$i});                break;            case ')':                if($t != '') array_unshift($data, $t);                $t = '';                while($stack[0] != '(') {                    postfix_callback(array_shift($stack), $data);                }                array_shift($stack);                break;            default:                if($i > $last+1 && $t != '') {                    array_unshift($data, $t);                    $t = '';                }                $t .= $infix{$i};                $last = $i;                break;         }        $i++;    }    while($stack) {        postfix_callback(array_shift($stack), $data);    }    return $data[0];}/** * postfix 的工作函数 * 用于计算表达式的值 **/function postfix_callback($ch, &$data) {    $b = array_shift($data);    switch($ch) {        case '+':            $data[0] += $b;            break;        case '-':            $data[0] -= $b;            break;        case '*':            $data[0] *= $b;            break;        case '/':            $data[0] /= $b;            break;    }}
ログイン後にコピー
测试例
PHP code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->echo postfix( '(2+3)*(3+4)' ); //out 35
ログイン後にコピー


------解决方案--------------------
先回贴在看
------解决方案--------------------
这个好东西。

------解决方案--------------------
前排占座, 板主老大给力.
------解决方案--------------------
前排占座, 板主老大给力.
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

OP Stackの構造的側面と機能の詳細な調査 OP Stackの構造的側面と機能の詳細な調査 Jan 18, 2024 pm 05:45 PM

OPStack は、Optimism Network の開発グループである Optimism Collective によってリリースされたオープンソースのブロックチェーン フレームワークです。これは、イーサリアム コミュニティとオプティミズム コミュニティの両方にとって重要なツールです。 OPStack の主な目標は、オプティミズム ネットワークを強化し、オプティミズム メインネット、および今後のオプティミズム スーパーチェーンとそのガバナンス モデルに主要なソフトウェア ツールを提供することです。開発者指向の環境を提供することで、OPStack の中心となるアイデアは、イーサリアム領域の成長とイノベーションを促進することです。これにより、最先端の開発への道が開かれ、ブロックチェーンの作成がより簡単になります。 OPStac

C# の Array.Sort 関数を使用して配列を並べ替える C# の Array.Sort 関数を使用して配列を並べ替える Nov 18, 2023 am 10:37 AM

タイトル: Array.Sort 関数を使用して C# で配列を並べ替える例 本文: C# では、配列は一般的に使用されるデータ構造であり、多くの場合、配列を並べ替える必要があります。 C# には Array クラスが用意されており、このクラスには配列を簡単に並べ替えるための Sort メソッドがあります。この記事では、C# で Array.Sort 関数を使用して配列を並べ替える方法を示し、具体的なコード例を示します。まず、Array.Sort 関数の基本的な使用法を理解する必要があります。 Array.So

Java は、Stack クラスの empty() 関数を使用して、スタックが空かどうかを判断します。 Java は、Stack クラスの empty() 関数を使用して、スタックが空かどうかを判断します。 Jul 25, 2023 pm 10:25 PM

Java は、Stack クラスの empty() 関数を使用して、スタックが空かどうかを判断します。スタック (Stack) は、先入れ後出し (FILO) 原則に従う一般的なデータ構造です。 Java では、Stack クラスを使用してスタックの機能を実装できます。 Stack クラスは、スタックを操作するための一連のメソッドを提供します。一般的に使用されるメソッドの 1 つは、スタックが空かどうかを判断するために使用される empty() 関数です。 Java では、Stack クラスは java.util パッケージにあります。このクラスを使用するには、次のものが必要です。

HMD Skyline に新しいカラーオプションと公式磁気ケースが追加されました HMD Skyline に新しいカラーオプションと公式磁気ケースが追加されました Aug 23, 2024 am 07:04 AM

HMD Skyline (Amazon で $499 で入手可能) が先月発売されたとき、ネオン ピンクとツイスト ブラックの 2 色で発売されました。これらに、ブルー トパーズと呼ばれる 3 番目の色が加わりました。 HMD Global は、ph の公式ケースも発表しました。

PHPのarray_merge_recursive()関数を使用するシンプルで明確な方法 PHPのarray_merge_recursive()関数を使用するシンプルで明確な方法 Jun 27, 2023 pm 01:48 PM

PHP でプログラミングする場合、多くの場合、配列をマージする必要があります。 PHP には、配列のマージを完了するための array_merge() 関数が用意されていますが、配列内に同じキーが存在する場合、この関数は元の値を上書きします。この問題を解決するために、PHP は配列をマージして同じキーの値を保持できる array_merge_recursive() 関数を言語で提供し、プログラム設計をより柔軟にします。配列マージ

PHP で array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法 PHP で array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法 Jun 26, 2023 pm 01:41 PM

PHP には、配列操作をより便利かつ高速にする強力な配列関数が多数あります。 2 つの配列を結合して連想配列にする必要がある場合、PHP の array_combine 関数を使用してこの操作を実行できます。この関数は、実際には、ある配列のキーを別の配列の値として新しい連想配列に結合するために使用されます。次に、PHP の array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法を説明します。 array_comb について学ぶ

スイッチケース判定変数 スイッチケース判定変数 Feb 19, 2024 am 08:04 AM

Switchcase では、変数を決定するための特定のコード例が必要です。プログラミングでは、さまざまな変数値に基づいてさまざまな操作を実行する必要があることがよくあります。 switchcase ステートメントは、変数の値に基づいて実行するコードのさまざまなブロックを選択できる便利な構造です。以下は、switchcase ステートメントを使用して変数のさまざまな値を決定する方法を示す具体的なコード例です。 #includeintmain(){

データフォルダにはどんなデータが入っているのでしょうか? データフォルダにはどんなデータが入っているのでしょうか? May 05, 2023 pm 04:30 PM

データ フォルダーには、ソフトウェア設定やインストール パッケージなどのシステム データとプログラム データが含まれています。データ フォルダー内の各フォルダーは、データ ファイルがファイル名データを参照しているか拡張子を参照しているかに関係なく、異なる種類のデータ ストレージ フォルダーを表します。 , これらはすべて、システムまたはプログラムによってカスタマイズされたデータ ファイルです。データは、データ ストレージのためのバックアップ ファイルです。通常、meidaplayer、メモ帳、または Word で開くことができます。

See all articles