- ベストアンサー
計算式の文字列を解析して自分で計算する方法
VC++2005で開発しております。 標記についてですが、例えば 文字列「1+2+3」を解析して、結果「6」を算出する方法って、 自分で文字列を解析していくしか無いでしょうか? 例えば「このサイトに参考になりそうなのあるよー」ですとか、 「こういう関数あるよー」ですとか、 「こういう風にするといいんじゃない?」といったアドバイスを いただけたらとても助かりますm(__)m ちなみに使用するのは 「()」 「+」 「-」 「/」 「*」 です。 ご教授お願いいたしますm(__)m
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
それぞのれトークンの切り出しができているとして、その昔は、「逆ポーランド記法」を経由して計算したものですが。 全般的な説明 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 こんなのはいかがでしょう。
その他の回答 (4)
- yama1718
- ベストアンサー率41% (670/1618)
>ただ、どれが四則演算に使えるソースなのかよく分からず・・・ >「poly.c」を参考にすれば良いのでしょうか・・・? 上にチョット書いてますけど、eval.c です。 こういう計算式を求めるアルゴリズムは「式の評価」と言われますので、 そのキーワードで検索すると他にも参考になるソースや解説を探せますよ。
- Tacosan
- ベストアンサー率23% (3656/15482)
昔は RPN ですが, いまどきはあんまり流行っていないと思います>#3. 「直接計算する」なら RPN を経由せずそのまま計算しちゃいますし, 「記憶しておいて後でなんかする」場合でもいまどきなら RPN じゃなく構文木なんかを使うような気がします.
お礼
ご回答ありがとうございます。 逆ポーランドに加え、構文木についても調べてみたいと思います^^
- yama1718
- ベストアンサー率41% (670/1618)
以前、同じような質問でアドバイスした事があります。 参照URLの回答を参考にして下さい。
お礼
ご回答ありがとうございます。 早速「『C言語による最新アルゴリズム事典』全ソースコード」とその目次もダウンロードいたしました。 ただ、どれが四則演算に使えるソースなのかよく分からず・・・ 「poly.c」を参考にすれば良いのでしょうか・・・?
- Tacosan
- ベストアンサー率23% (3656/15482)
パーザジェネレータ (yacc や bison など) を使えば, 「自分で作る」ことは避けられる. ま, 今度は「そいつらの使い方」が問題になるわけだが. 自力で作ってもそんなに難しくはならない.
お礼
ご回答ありがとうございます。 パーザジェネレータ というものを聞いたことも無いので、今回はパスさせていただきます。 時間に余裕が出来たら調べて使えるようになれたら、と思います。 ありがとうございましたm(__)m
お礼
ご回答ありがとうございます。 そういえば逆ポーランド、基本情報処理技術者の試験勉強で見た気がします^^ ソースもあるので、参考にさせていただきたいと思います。 ありがとうございました^^