以下是我所拥有的文件的片段:
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 ++发生。
答案 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];
}
}
}
}