2016-03-04 177 views
-1

我想读取一个数字文件。isstringstream从文件读取C++

使用我的代码,我只读了每行的第一个数字。 getline()获取该行,但是isstringstream只读取该行中的1个数字而忽略其余数字。我需要阅读每一个号码,将其插入我的矢量

文件的例子是:

118 115 115 116 116 116 118 117 115 114 114 115 117 118 117 114 114 116 117 
116 117 117 117 116 115 115 115 115 116 118 118 117 116 114 112 112 112 114 
115 ... so on 

int main() 
{ 
vector<unsigned char>gray; 
int lines=2; 

    for (int i = 0; i < lines; i++) 

    { 
     string line4; 
     getline(infile, line4); 
     istringstream iss4(line4); 
     int g; 
     iss4 >> g; 

     gray.push_back((unsigned char)g); 
    } 
return 0; 
} 
+3

因此,编写一个代码来做到这一点。两个循环并不多。 – LogicStuff

+0

为什么连两个循环?刚刚阅读每个值使用'infile >>' – NathanOliver

+0

@NathanOliver OP是计数行只读前两个。然后,我的意思是总共两个循环 – LogicStuff

回答

0

改变你的代码位:

#include <cstdint> // For uint8_t 

int main() 
{ 
    vector<uint8_t>gray; 
    unsigned int line_number = 0U; 
    std::string text; 
    while (getline(infile, text)) 
    { 
     istringstream iss4(text); 
     uint8_t value; 
     while (iss4 >> value) 
     { 
      gray.push_back(value); 
     } 
    } 
return 0; 
} 

注:

  1. 当提取比一个值更多的 时,istringstream可以像文件一样对待。
  2. uint8_t类型保证8位无符号整数。
0

您可以使用std::istream_iterator方法;这里用std::cin举例说明。

#include <algorithm> 
#include <iostream> 
#include <iterator> 
#include <vector> 

int main() 
{ 
    std::vector<unsigned char> gray; 

    std::copy(std::istream_iterator<int>{std::cin}, 
       std::istream_iterator<int>{}, 
       std::back_inserter(gray)); 

    return 0; 
}