• ベストアンサー

C#で文字の計算方法について

お世話様です。 C#でプログラムを作っています。(初心者です) aa="7+2-3" この文字を計算して答え(この計算式では6)を出したいのです。 値aaには"4-2+7"の時のあれば、"12/5*3"など何が入るかわかりません。(全て文字です。) とりあえず手順として、下記のように値を取り出す事には成功しました。 a=7 b="+" c=2 d="-" e=3 でも、これから先どうやって計算してよいものか、わかりません。 何か良い方法はありませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • seabass3
  • ベストアンサー率81% (9/11)
回答No.4

#3さんとかぶるのですが、「二分木」もしくは「逆ポーランド記法」と言う方法で解決します。 詳しくはこちらの3つを順にご覧ください。 プログラムが付いてるので、内部構造がわかりやすいかと思います。 http://santamartadotnet.hp.infoseek.co.jp/documents/cpp/polish.html http://santamartadotnet.hp.infoseek.co.jp/documents/csharp/polish.html http://feconi.azo.to/csharp/stack.php

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

数値と演算子を切り分けて取り出すことに成功しているので、あとは、計算するだけですよね。 その考え方の1つ。 数値スタックと演算子スタックを用意して 数値が現れたら数値スタックへ、 演算子が現れたら演算子スタックへ積みます。 演算子の場合は、現在のスタックのトップと比べて、同列のものだったらそれを消費(計算)します、優先順位が高いものならそのまま(計算を保留して)スタックに積みます。 そうしているウチに、式がなくなったら、演算子スタックを調べて、計算を行います。 例 7+2-3の場合 -が出てきた時点で 演算子:+ 数値:7,2 になっています。今調べている演算子は-で+と同列なので、演算子スタックに積まれている演算をして結果をスタックにいれます。 演算子: 数値:9 式が終了した時点の状態 演算子:- 数値:9、3 演算子スタックに演算子が残っているので、演算します。 演算子: 数値:6 演算子が無くなったら終了、 数値スタックのトップを取り出します。 例2: 7+12/6*3 *が来たときの状態 演算子:+,/ 数値:7,12,6 *は/と同列の計算なので、現在のスタックを消費(計算)します。 演算子:+ 数値:7,2 *は、+より優先度が高いので、そのまま積みます 演算子:+,* 数値:7,2,3 式が終了したので、スタックを消費します 演算子:+ 数値:7,6 演算子: 数値:13

すると、全ての回答が全文表示されます。
  • MetalKing
  • ベストアンサー率57% (15/26)
回答No.2

XPathNavigator.Evaluate を使うと簡単に実現できます ほとんどインチキですけど...

すると、全ての回答が全文表示されます。
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1
参考URL:
http://joshua.cs.inf.shizuoka.ac.jp/2002/T030/exercise/rp7.html
すると、全ての回答が全文表示されます。

関連するQ&A