11

有効性をチェックするために、後置式 (例: 3 5 +) を含む文字列 (配列、何か) を評価する良い方法は何でしょうか?

4

4 に答える 4

18

ここで、有効とは、コードを実行してもスタックがアンダーフローせず、スタックに単一の値が残ることを意味すると仮定しています。より厳密な有効性の概念がある場合は、より洗練されたチェッカーが必要になります。

この種の有効性を確認したい場合は、文字列を評価する必要はなく、スタックではなくカウンターを使用できます。カウンターは、評価した場合にスタックにある値の数を追跡します。簡単にするために、リテラル、2 項演算子、および単項演算子しかないとします。このアルゴリズムは、特別なデクリメント操作を使用します。デクリメント時にカウンターがゼロを下回ると、文字列は無効になります。

  1. カウンターを 0 に初期化します。
  2. リテラルが表示されたら、カウンターをインクリメントします。
  3. 二項演算子が表示されたら、カウンターを 2 回デクリメントしてからインクリメントします。
  4. 単項演算子が表示されたら、カウンターをデクリメントしてからインクリメントします。
  5. 文字列の最後で、カウンターが 1 で、0 を下回ったことがない場合、文字列は有効です。
于 2009-04-25T22:40:13.513 に答える
0

後置式が有効かどうかを確認するには: (入力が char 配列の場合) 1.オペランドの数は no と等しくなければなりません。演算子 + 1 の数。これを確認するには、チェック変数を保持します。チェック=0。オペランドごとにこれを増やし、演算子ごとに減らします。最終的にその値が 1 の場合、式は有効です。

2.配列の最初の 2 つの要素はオペランドである必要があります。後置式は、演算子を 1 番目または 2 番目の要素として持つことはできません。if 制御文で確認してください。

于 2014-10-31T09:22:23.180 に答える