расщепление строки как индекс матрицы смежности - PullRequest
2 голосов
/ 25 декабря 2011

у меня есть графовый файл как

    3200
    12 16
    114 61
    37 465
    .
    .
    .

and it goes like this.

первое число - вершина. Число других целых чисел представляет вершины, и между ними есть ребро.Например, myMatrix[12][16] = 1 and myMatrix[16][12] = 1

Я использовал ifstream для чтения graph.txt (ifstream theGraphFile("graph.txt", ios::in);) и создал матрицу bool с постоянным размером, например 10000

. Мой шаблон для моей цели такой:

while( getline( theGraphFile, line ) )
{
        if (line[1])
            continue;
        else
        {
            //parse
            //matrix
        }

}

поэтому мой вопрос: как я могу разделить эти числа как «перед пробелом и до конца строки».если моя строка в n-й строке 12 51, я хочу использовать их в качестве матричных индексов, таких как myMatrix[12][51] = 1

Спасибо ..:)

Ответы [ 2 ]

0 голосов
/ 25 декабря 2011

На ум приходит 2 способа: вы можете использовать форматированное извлечение operator >> непосредственно из ifstream или использовать getline, чтобы сначала поместить всю строку в строку, а затем использовать istringstream, чтобы извлечь ее в индексы.

Если ваш графовый файл будет содержать индексы только один за другим, как в вашем примере, первый метод, вероятно, будет проще:

while(theGraphFile >> x >> y)
{
    if(x < myWidth && y < myHeight)
        myMatrix[x][y] = true;
}

Второй метод с getline даст некоторую гибкость, если каждая строка имеет другую информацию:

while(getline(theGraphFile, line))
{
    istringstream linestr(line);
    // lines that don't start with x, y indices get skipped.
    // feel free to handle this differently
    if(!(linestr >> x >> y)) continue;  

    if(x < myWidth && y < myHeight) { myMatrix[x][y] = true; }
    // parse other data
}
0 голосов
/ 25 декабря 2011

Попробуйте этот код

int a = 0, b = -1; 
bool done = false;
for (int i = 0; !done; ++i)
{
  if (line[i] >= '0' && line[i] <= '9')
  {
     if (b == -1)
     {
       a *= 10;
       a += line[i] - '0';
     }
     else
     {
       b *= 10;
       b += line[i] - '0';
     }

  } 
  else if (b == -1)
    b = 0;
  else
    done = true;
}

myMatrix[a][b] = myMatrix[b][a] = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...