从文件读入3D数组

时间:2014-01-19 22:23:57

标签: c++ arrays file-io

以下是我所拥有的文件的片段:

23 //clump1.A
45
21

24 //clump1.B
235
212


2315 //clump2.A
123
14

1234 //clump2.B
213
123
213


3112 //clump3.A
323
4214

我在每个“丛”中显示大约3-4个,但每个丛中有74个数字。每个双段分开的数字块有2个“团块”,其中有4192个较大的团块。

我需要构建以下数组:

int array[4192][2][74], 

例如,上例中的array[2][0][1] = 3112

如何读取此文件并将其置于数组的正确位置。使用istringstream给我一个seg错误。

我使用与Read integers from a file into array

类似的代码

如果我要详细说明,请告诉我。

while(std::getline(file, line)){
    std::istringstream input(line);
    for(j=0; j<2; j++){
        for(k=0; k<NUM_REGIONS; k++){
            input >> history[i][j][k][0];
        }
    }
    i++;
}

有了这个,我怎么能跳过新的行字符,并确保一行中有两个新行字符会导致i ++发生。

2 个答案:

答案 0 :(得分:0)

难道你不能只计算带有旗帜的新行吗?

即:

input >> tmp;
if tmp == /n
    flag++;
if flag > 2{
    flag = 0;
    i++;
    continue;
}
history [][][] = tmp

这可能不是你想要的,但你可以修改...... 或者我误解了你的问题?

答案 1 :(得分:0)

首先请注意,在getline中:

  

如果找到分隔符,则将其提取并丢弃。

在这种情况下,分隔符为'\ n',因此要检查是否已读取空行,您只需检查line是否为空。然后你可以使用modulo和一些整数来计算它们。

while(std::getline(file, line)){
    if(line.empty()) {
        ++n;
        n %= 2;
        if(n == 0) ++i;
    }
    else {
        std::istringstream input(line);
        for(j=0; j<2; j++){
            for(k=0; k<NUM_REGIONS; k++){
                input >> history[i][j][k][0];
            }
        }
    }
}