C ++ – многократное использование 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++; } 

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

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

 separate.str(row); 

… сбросить его, вызвав

 separate.clear(); 

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

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

  • Отменить заданное предложение в Java
  • Java String не работает
  • В чем разница между char s и char * s?
  • Символы в строке изменились после загрузки HTML из Интернета
  • Согласованность hashCode () в строке Java
  • Как преобразовать String в int в Java?
  • Как преобразовать объект String в Boolean Object?
  • Почему строки нельзя изменять в Java и .NET?
  • Как преобразовать символ в строку?
  • Найти текст в строке с C #
  • Добавить нулевое дополнение к строке
  • Давайте будем гением компьютера.