私は電卓のようなプログラムを作成しようとしていますが、テキストボックスに計算を入力し、その計算結果をint
に変換します。結果はここにあります。多くの作業がありますテキストとして与えられた数式を評価する
string calcStr = textBox1.Text;
int result = calcStr;
あまり複雑ではない提案はありますか?
私は電卓のようなプログラムを作成しようとしていますが、テキストボックスに計算を入力し、その計算結果をint
に変換します。結果はここにあります。多くの作業がありますテキストとして与えられた数式を評価する
string calcStr = textBox1.Text;
int result = calcStr;
あまり複雑ではない提案はありますか?
この種の仕事にはNCalcを使用してください...無料で、ソースが付属しており、すべての重い持ち上げ(数式の解析など)を行い、計算結果を提供します。 「3 + 4月2日」のような
私が問題を正しく理解している場合は、テキストボックスから1 + 3 + 4のような式を解析し、入力に基づいて計算を実行できるようにしたいと考えています。それは実際に思うよりも難しい作業です。
一般的な解決策の1つは、Shunting-yardアルゴリズムを使用して式を解析することです。詳細は、http://en.wikipedia.org/wiki/Shunting-yard_algorithmを参照してください。
質問は、彼が解析しようとしている文字列の形式を述べていません。これは、一般的な挿入表記の良い答えです。しかし、私は入力がポーランド表記法で得られるならば、実際の計算アルゴリズムは実装するのがずっと簡単だと言います。 (+1)。 – driis
あなたは単にあなたが式を取る必要がある場合
Int32.Parse(string)
のような機能を使用し、文字列から数を解析しようとしている場合は、 その後、一度に1文字ずつ抽出し、それが何であるかを判断する必要があります。
文字列が の場合「32 + 4/12」 文字列内のすべての文字をループし、現在の文字を数値に解析する必要があります。 数値であるかどうかをテストする関数です。またはasciiの値をチェックするだけです。
成功した場合は、現在の数字と次の数字を取り、数字以外の文字を押すまで再試行してください。 番号を抽出できるようになりました。 数字以外の文字は、許可している数学演算子と照合されます。それ以外の場合はエラーが発生します。
すべての方程式を解くことができたら、おそらくスタック演算のような処理をして評価する必要があります。 Assemblyクラスでは、バンチナの数値と演算子をスタックにプッシュし、上から1つ上にポップし、前の数値をその次の数値で中間の演算子で評価します。
私はこれがあなたが話していたことを望みます。運が良かった!
正規表現がこの超簡単になると聞きます。 –
@YuriyFaktorovich、あなたが聞いていることは間違っています。 –
@ L.B。私は冗談を言っていた –