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++;
    }

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

19
задан Naomak 6 May 2010 в 15:34
поделиться

2 ответа

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

separate.str(row);

... сбросьте ее вызовом

separate.clear();

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

27
ответ дан 30 November 2019 в 03:59
поделиться

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

5
ответ дан 30 November 2019 в 03:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: