2014-01-19 56 views
1

我有一个文件像这样:整数到数组

1 20 42 45 ...(74 integers) 
2 43 41 92 ...(74 integers) 

有74行74点的整数每个用空格分开。

下面的代码是不是为我工作:只

#define NUM 74 
int info[NUM][NUM] = {0}; 
std::ifstream file("file.txt"); 
std::string line; 
int i = 0, j; 

while(std::getline(file, line)){ 
    for(j=0; j<NUM; j++){ 
     std::istringstream(line) >> info[i][j]; 
    } 
    i++; 
} 

此代码存储每一行​​的第一个值到每个信息[I]的74列。我可以使用: std :: istringstream(line)>> info [i] [0] >> info [i] [1] 但我不知道如果我有每行2个整数的列表确定如何做到这一点对于大量的整数(如74)。

回答

4

为内循环外的每一行创建std::istringstream并在内循环内重新使用它。

while(std::getline(file, line)){ 
    std::istringstream line_stream(line); 
    for(j=0; j<NUM; j++){ 
     line_stream >> info[i][j]; 
    } 
    i++; 
} 
+0

谢谢,类似于我想通了 – user1220086

1

我已经想通了如何做到这一点。

需要改变while循环,如下所示:

while(std::getline(file,line)){ 
    std::istringstream iss(line); 
    int val; 
    j = 0; 
    while(iss >> val){ 
     info[i][j] = val; 
     j++; 
    } 
    i++; 
} 
+0

+1这种方法实际上比使用串流更可取。 – 0x499602D2

+0

你不需要'val'只是'while(iss >> info [i] [j]){ – Veilkrand

2

既然你已经知道你读的整数,则可以使用格式化的输入是这样的:

std::ifstream in("text.txt"); 
int values[74][74]; 

for (int i = 0; i < 74; ++i) 
    for (int j = 0; j < 74; ++j) 
     in >> values[i][j];