次のような入力ファイルから道路データを読み込むプログラムに取り組んでいます。
INTERSECTIONS:
1 0.5 Speedway and Campbell // intersection ID, safety rating, name
2 0.3 Park and Grant
3 0.1 Euclid and Grant
STREETS:
1 2 3 // intersection 1, intersection 2, distance in between
2 3 1
3 1 2
テーブル内の各値は、タブ (\t) 文字で区切られています
このデータを、グラフで指定された適切な変数に読み込む必要があります。私は主に簡単な答えを探しています: getline を使用して一度に 1 行を読み取り、その行をデータの各ビットに分割することは可能ですか? もしそうなら、どうすればいいですか?
メインファイルにこれまでにあるものは次のとおりです。
#include "graph.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
vector <Vertex*> vertices;
vector <Edge*> edges;
int main (int argc, char *argv[]) {
if( argc != 4 )
{
std::cout << "\nUsage: " << argv[0] << " distanceInMiles startingIntersection streetMapGraphFile \n\n" << endl;
return -1;
}
ifstream mapfile ("streetMapGraphFile");
int count = 0;
int loc = 0;
Graph streetMap;
if (mapfile.is_open())
{
while ( mapfile.good() )
{
while ( count != 1 ) {
string line;
getline(mapfile,line);
if ( line == "INTERSECTIONS:" )
{
getline(mapfile,line);
}
else if ( line == "" )
{
count++;
break; // to avoid reading blank line line
}
stringstream ss(line);
ss >> streetMap.intersection->streetID >> streetMap.intersection->safetyIndex;
getline(ss, streetMap.intersection->name);
}
string line2;
getline(mapfile,line2);
if ( line2 == "STREETS:" )
{
getline(mapfile,line2);
}
// TODO: Read in the edges/streets here
stringstream ss2(line2);
ss2 >> streetMap.street->intersection1 >> streetMap.street->intersection2 >> streetMap.street->distance;
}
mapfile.close();
}
else { cerr << "Error: unable to open file" << endl; }
return 0;
}
行 string に stringstream を実装するようにコードを変更しましたが、段階的にデバッグすると、次の行を実行した後にコンパイラがクラッシュします。
ss >> streetMap.intersection->streetID >> streetMap.intersection->safetyIndex;
このエラーは、「safejogger.exe の 0x0F592208 (msvcp110d.dll) で未処理の例外: 0xC0000005: アクセス違反書き込み場所 0xCCCCCCCC」と表示されます。