2014-01-19 53 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];