私はそれが変数は、このような数値、配列や文字列など、さまざまなタイプを持つことができることをあなたの質問で暗黙的だと思います。その場合、あなたはboost::any<>
やboost::variant<>
を言う、またはあなた自身の変数の型のALAを作成使用するかどうかを決定する必要があります。
struct Var
{
enum { Double, String, Array } Type;
Type type_;
double double_;
std::string string_;
std::vector<double> array_;
Var(Type t) : type_(t), double_(0) { } // empty double/string/array
Var(double d) : type_(Double), double_(d) { }
Var(const std::string& s) : type_(String), string_(s) { }
...
};
あるいは、C++の作り付けの多型を使用し、各実の基底クラスと派生クラスを持つことができます世界のデータ型。テキスト表現を常に保存して、すべてをstd::string
に保存するだけでも十分かもしれません。しかし、あなたはそれを行います、あなたは "タイプ"というタイプの値を格納するとしましょう。
変数の名前がコロンの左側に指定されているようです。対応する変数がプログラムでハードコードされていることがわかっている場合は、既存の変数を右側の値に設定できます。それ以外の場合は、これらの識別子の名前に動的に関連付けられた変数を作成する必要があります。これは、識別子がstd::map<std::string, Type>
で行われます。
std::map<std::string, Type> variables;
variables["age"] = Type(28);
variables["name"] = Type("Fred");
実際のテキストファイルを解析するには、iostreamsを使用します。時間ALAでラインを読む:
std::string line;
while (getline(cin, line))
{
std::string::pos n = line.find(':');
if (pos != std::string::npos)
{
std::string identifier = line.substr(0, n - 1);
Type var;
{
// try parsing it as a number...
std::istringstream iss = line.substr(n + 1);
char c;
double d;
if (iss >> d && !(iss >> c))
var = d;
}
{
// try parsing it as an array...
std::istringstream iss = line.substr(n + 1);
var.clear(Array);
double d;
if (iss >> c && c == '[')
while (iss >> d)
result.array_.push_back(d);
if (iss && iss >> c && c == ']' && !(is >> c))
// parsed successfully as an array - use "result"
}
{
// it's a string...
var = line.substr(n + 1);
}
あなたがこの上でスタートを作り、あなたが動けなく特定の助けを求めるようにしてください。
注:Ruby、python、perlなどの言語で、この要件を満たす動作中のプログラム(スローながらも)を取得する方が簡単です。
あなたの問題は何ですか?まだコードはありますか?それはなぜ失敗ですか? –
より具体的に言えば、変数をファイルに書き込むことは、2行で行うのと同じくらい簡単です! – Sudantha
'.txt'ファイルに関する制約がありますか?自由にフォーマットを変更できますか? – ereOn