Подтвердить что ты не робот

С++ - многократное использование istringstream

У меня есть код для чтения файлов с поплавковыми номерами в строке, хранящейся следующим образом: "3.34 | 2.3409 | 1.0001 |... | 1.1 |". Я хотел бы прочитать их с помощью istringstream, но он не работает так, как я ожидал бы:

  string row;
  string strNum;

  istringstream separate;  // textovy stream pro konverzi

   while ( getline(file,row) ) {
      separate.str(row);  // = HERE is PROBLEM =
      while( getline(separate, strNum, '|') )  { // using delimiter
        flNum = strToFl(strNum);    // my conversion
        insertIntoMatrix(i,j,flNum);  // some function
        j++;
      }
      i++;
    }

В отмеченной точке строка копируется в отдельный поток только в первый раз. На следующей итерации он не работает, и он ничего не делает. Я ожидал, что можно использовать больше раз, не создавая новый объект istringstream на каждой итерации.

4b9b3361

Ответ 1

После установки строки в istringstream...

separate.str(row);

... reset, вызывая

separate.clear();

Это очищает любые флаги iostate, установленные в предыдущей итерации, или путем установки строки. http://www.cplusplus.com/reference/iostream/ios/clear/

Ответ 2

Вам нужно добавить строку separate.clear(); после separate.str(row), чтобы очистить бит состояния, в противном случае значение eofbit будет установлено, а последующие чтения не будут выполнены.