2017-12-09 22 views
0

私は中点式を入力として取り、 '='ボタンをクリックすると電卓式のアプリケーションを作成していますが、無効な式の場合には式を解き、結果やエラーを出します。Calculatorの中置式を解く方法

これまでは、スタックを使ってポストフィックスに修正し、式を解くことができましたが、その制限はオペランドとして1つの数字だけです。

例:

1 + 2(3×3)-4^2 //

11 + 2(* 3 13)を作動-4^20 //

が動作していません

1.2 + 2.4(* 0.5 10.5)-4^2 //左から右へ

入力を計算我々はBODMASルールと同じ優先順位の演算子を従わなければならない一方で、文字列式と評価されなければならないされ機能していません。

この問題をどのように解決するかについて、私に洞察を与えることはできますか?私はどんなアルゴリズムを使うべきですか?異なるエッジケースを扱う最も効率的な方法は何でしょうか?実例へのリンク。

+0

逆ポーランド語記法を確認してください – Antoniossss

+0

標準的な解決策は[Shunting-yard algorithm](https://en.wikipedia.org/wiki/Shunting-yard_algorithm)です。 1桁以上の数字を扱うには少し修正する必要があります。実際、あなたの問題のように見えます。あなたは '1+(3 * 3)-4^2'を扱うことができますが、数字が複数の文字を持つときは失敗します。あなたの問題は字句解析のようです。しかし、あなたがコードを投稿しておらず、「働いていない」以外の記述をしていないので、伝えるのは難しいです。 –

答えて

0

数字の後ろに空白が含まれていましたが、変換中に番号が完全かどうかを判断するためにスペースを待っていました。こうして私はそれを解決することができました。 You can check this code if you want.

関連する問題