![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.4ベストアンサー
- 回答日時:
「数式の評価」というのは、正攻法でやるとなると、結構難易度が高い問題です。
初めて手をだすなら、再帰下降解析ぐらいが簡単だと思いますが、
コードの記述は結構単純ですが、「それでどうして式が計算できるのか」を理解するのはなかなか難しかったりします。
再帰下降解析の解説
http://ja.wikipedia.org/wiki/%E5%86%8D%E5%B8%B0% …
C++ での記述例
http://www.prefield.com/algorithm/string/parser. …
この回答へのお礼
お礼日時:2008/10/15 22:04
なるほどです、ありがとうございました。
snowizeさんの回答と合わせてようやく
理解できました。
この度はありがとうございました。
No.3
- 回答日時:
正攻法はすでに回答が出ているとおりですので、イカサマ的手法も紹介しておきましょう。
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
int main()
{
std::string expr;
std::getline(std::cin, expr);
std::ofstream ofs("sub.cpp");
ofs << "#include <iostream>\nint main() { ";
ofs << "std::cout << (" << expr << ") << std::endl;\n}" << std::endl;
ofs.close();
std::system("g++ -o sub sub.cpp; ./sub");
return 0;
}
GCC限定になりますが、上記のようにしても計算させることはできます。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_02.png?e8efa67)
No.2
- 回答日時:
あは。
高2のときの課題で出て泣きながら頑張った記憶があります。前段階として「逆ポーランド記法で計算できる電卓」を作成して、追って「普通の数式を逆ポーランド記法に書き換えるソフト」を作ってみるのがいいかもしれません。
まどろっこしいかもしれませんが、「43+5*2」を「43 + 5 * 2」と適切に分解することができるかどうかが肝なので、最初はスペースを区切り文字として使うなどして、段階的に処理をしていくと結果的には早いかも。
余談ですが、括弧は再帰処理すればいいだけなので、あんまり難しく考えなくてもいいです。開きと閉じの数が一致してるかだけはチェック。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
- 化学 化学のエンタルピ変化を求め方について ある例題では各物質のモール数を換算して計算することもあり、ある 1 2022/06/20 23:22
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- C言語・C++・C# プログラミング初心者です。 演算子を習い、自力で計算機を作ろうと思い、写真のようなプログラムを書きま 2 2022/08/14 21:27
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 3×3のラテン方陣をつくるプログラムを作成したのですが、(↓) #include <stdio.h> 5 2023/07/10 01:53
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- その他(プログラミング・Web制作) プログラミングって本来数学的な計算をする為のものではないのですか? 学校で配られたFortran90 11 2022/08/25 22:14
- 大学・短大 早稲田大学基幹理工学部で使用する教科書 4 2022/11/13 20:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
空ENTERの判別
-
enumの値から定義名を文字列化...
-
switch文のエラーについて
-
ハミング符号の解読について
-
_CRT_SECURE_NO_DEPRECATE が効...
-
C言語のポインターで詰まっている
-
unsigned char SJis[2]からstd:...
-
#include "fstream.h"
-
snprintfが使用できない。
-
CStringとString
-
C++で、テキストファイルを一行...
-
指定した文字を削除したい
-
mapの初期化
-
std::mapのメモリアロケータに...
-
C++でShowCursorを使いたい。
-
独立係数について教えて下さい。
-
Enterキーを押されたら次の処理...
-
信頼区間の1.96や1.65ってどこ...
-
2÷3などの余りについて
-
マイナスからプラスへ転じた時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
switch文のエラーについて
-
構文エラーが出ているのですが...
-
VC++で文字列から任意の文字を...
-
enumの値から定義名を文字列化...
-
空ENTERの判別
-
C++でShowCursorを使いたい。
-
なぜ、C++の標準ヘッダをインク...
-
#define中の#のエスケープ
-
C++で、テキストファイルを一行...
-
gccでコンパイル時のエラー
-
C言語のエラーを修正したい
-
#include "fstream.h"
-
C言語のポインターで詰まっている
-
リモートデスクトップの接続元I...
-
構造体配列のvectorへの変換と...
-
JPEGやPNGが読めるLoadImage関数
-
VS2019でofstreamが未定義になる
-
構造体に決められた文字列を入...
-
VHDLのsignedとunsignedの違いは?
-
std::wstringのメモリリークに...
おすすめ情報