• ベストアンサー

計算式の文字列を解析して自分で計算する方法

VC++2005で開発しております。 標記についてですが、例えば 文字列「1+2+3」を解析して、結果「6」を算出する方法って、 自分で文字列を解析していくしか無いでしょうか? 例えば「このサイトに参考になりそうなのあるよー」ですとか、 「こういう関数あるよー」ですとか、 「こういう風にするといいんじゃない?」といったアドバイスを いただけたらとても助かりますm(__)m ちなみに使用するのは 「()」 「+」 「-」 「/」 「*」 です。 ご教授お願いいたしますm(__)m

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

  • ベストアンサー
回答No.3

それぞのれトークンの切り出しができているとして、その昔は、「逆ポーランド記法」を経由して計算したものですが。 全般的な説明 http://7ujm.net/etc/calcstart.html 逆ポーランド記法への変換(括弧の扱いも含む) http://www.gg.e-mansion.com/~kkatoh/program/novel2/novel207.html http://www.gg.e-mansion.com/~kkatoh/program/novel2/novel208.html こんなのはいかがでしょう。

ya-cha
質問者

お礼

ご回答ありがとうございます。 そういえば逆ポーランド、基本情報処理技術者の試験勉強で見た気がします^^ ソースもあるので、参考にさせていただきたいと思います。 ありがとうございました^^

その他の回答 (4)

  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.5

>ただ、どれが四則演算に使えるソースなのかよく分からず・・・ >「poly.c」を参考にすれば良いのでしょうか・・・? 上にチョット書いてますけど、eval.c です。 こういう計算式を求めるアルゴリズムは「式の評価」と言われますので、 そのキーワードで検索すると他にも参考になるソースや解説を探せますよ。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

昔は RPN ですが, いまどきはあんまり流行っていないと思います>#3. 「直接計算する」なら RPN を経由せずそのまま計算しちゃいますし, 「記憶しておいて後でなんかする」場合でもいまどきなら RPN じゃなく構文木なんかを使うような気がします.

ya-cha
質問者

お礼

ご回答ありがとうございます。 逆ポーランドに加え、構文木についても調べてみたいと思います^^

  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.2

以前、同じような質問でアドバイスした事があります。 参照URLの回答を参考にして下さい。

参考URL:
http://oshiete1.watch.impress.co.jp/qa5384718.html
ya-cha
質問者

お礼

ご回答ありがとうございます。 早速「『C言語による最新アルゴリズム事典』全ソースコード」とその目次もダウンロードいたしました。 ただ、どれが四則演算に使えるソースなのかよく分からず・・・ 「poly.c」を参考にすれば良いのでしょうか・・・?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

パーザジェネレータ (yacc や bison など) を使えば, 「自分で作る」ことは避けられる. ま, 今度は「そいつらの使い方」が問題になるわけだが. 自力で作ってもそんなに難しくはならない.

ya-cha
質問者

お礼

ご回答ありがとうございます。 パーザジェネレータ というものを聞いたことも無いので、今回はパスさせていただきます。 時間に余裕が出来たら調べて使えるようになれたら、と思います。 ありがとうございましたm(__)m

関連するQ&A