重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【6/2終了】教えて!goo新規会員登録

VC++2005で開発しております。

標記についてですが、例えば
文字列「1+2+3」を解析して、結果「6」を算出する方法って、
自分で文字列を解析していくしか無いでしょうか?

例えば「このサイトに参考になりそうなのあるよー」ですとか、
「こういう関数あるよー」ですとか、
「こういう風にするといいんじゃない?」といったアドバイスを
いただけたらとても助かりますm(__)m

ちなみに使用するのは
「()」
「+」
「-」
「/」
「*」
です。

ご教授お願いいたしますm(__)m

A 回答 (5件)

それぞのれトークンの切り出しができているとして、その昔は、「逆ポーランド記法」を経由して計算したものですが。



全般的な説明
http://7ujm.net/etc/calcstart.html

逆ポーランド記法への変換(括弧の扱いも含む)
http://www.gg.e-mansion.com/~kkatoh/program/nove …
http://www.gg.e-mansion.com/~kkatoh/program/nove …

こんなのはいかがでしょう。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

そういえば逆ポーランド、基本情報処理技術者の試験勉強で見た気がします^^

ソースもあるので、参考にさせていただきたいと思います。

ありがとうございました^^

お礼日時:2010/12/01 16:49

>ただ、どれが四則演算に使えるソースなのかよく分からず・・・


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

昔は RPN ですが, いまどきはあんまり流行っていないと思います>#3.


「直接計算する」なら RPN を経由せずそのまま計算しちゃいますし, 「記憶しておいて後でなんかする」場合でもいまどきなら RPN じゃなく構文木なんかを使うような気がします.
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

逆ポーランドに加え、構文木についても調べてみたいと思います^^

お礼日時:2010/12/01 16:56

以前、同じような質問でアドバイスした事があります。


参照URLの回答を参考にして下さい。

参考URL:http://oshiete1.watch.impress.co.jp/qa5384718.html
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

早速「『C言語による最新アルゴリズム事典』全ソースコード」とその目次もダウンロードいたしました。

ただ、どれが四則演算に使えるソースなのかよく分からず・・・

「poly.c」を参考にすれば良いのでしょうか・・・?

お礼日時:2010/12/01 16:47

パーザジェネレータ (yacc や bison など) を使えば, 「自分で作る」ことは避けられる.


ま, 今度は「そいつらの使い方」が問題になるわけだが.
自力で作ってもそんなに難しくはならない.
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

パーザジェネレータ というものを聞いたことも無いので、今回はパスさせていただきます。

時間に余裕が出来たら調べて使えるようになれたら、と思います。

ありがとうございましたm(__)m

お礼日時:2010/12/01 16:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!