21

我有一个代码用于读取在线存储的浮点数文件,如下所示:“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 对象的情况下使用更多次。

4

2 回答 2

30

将行设置为 istringstream 后...

separate.str(row);

...通过调用重置它

separate.clear();

这将清除在上一次迭代中设置或通过设置字符串设置的任何 iostate 标志。 http://www.cplusplus.com/reference/iostream/ios/clear/

于 2010-05-04T17:02:36.713 回答
5

您需要在清除状态位separate.clear();之后添加一行,否则获取设置和后续读取失败。separate.str(row)eofbit

于 2010-05-04T17:03:20.483 回答