0

私はテキストファイルを持っています、内容は

Point1, [5, 6]
Line2, [1, 2, 3], [-5, 55, 33]
Point2, [5, 3, 1]
Line1, [1, 2], [5, 7]

最初の変数(Point1、Line2、Point2、Line1)のように比較を行います

ポイント1の場合、ポイント1の配列に格納され、5がxとして設定され、yが6として設定されます。

デリムターをコンマと「[」および「]」に設定するにはどうすればよいですか。それに応じてそれらを格納するには、変数Point1、5、および6が必要です。

4

2 に答える 2

1

json-cppライブラリを使用できます。同様の構文があります。

{
 "Point1" : [5, 6],
 "Line2": {
     "param1" : [1, 2, 3],
     "param2" : [-5, 55, 33]
    },
  "Point2" : [5, 3, 1],
  "Line1" : {
   "param1" : [1, 2],
   "param2" : [5, 7]
   }
} 
于 2012-11-10T09:19:58.557 に答える
1

私はこの問題を可能な限り簡単な方法で解決します。getlineを使用してファイルを読み取り、のすべての出現箇所,[スペース]に置き換えます。std::istringstream次に、 fromを使用してすべての入力を読み取ることができます<sstream>。正規表現を使用することもできますが(boostまたはc ++ -11を使用する場合)、私が提案することでうまくいくと思います。

編集:これは私が提案することを行う方法の例です。ポイントの入力方法、行の処理方法のみを示します。名前に基づいてifステートメントを追加する必要があります。

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main() {
  string line;

  while (getline(cin, line)) {
    for (unsigned i = 0; i < line.size(); ++i) {
      if (line[i] == '[' || line[i] == ']' || line[i] == ',') {
        line[i] = ' ';
      }
    }
    istringstream in(line);

    string name;
    double x,y;
    in >> name >> x >> y; // Point1 <x> <y>
    ... do something with the point...
  }

  return 0;
}

replace_iffromを使用し<algorithm>て記号を置き換えることもできますが、この解決策を理解しやすいと思いました。

于 2012-11-10T09:09:11.677 に答える