2013-07-25 85 views
0

我需要将一个txt文件拆分为2个数组 txt文件包含完整的数字。我可以不使用字符串吗? 例如,对于输入如何根据其位置(偶数或奇数)将完整=数字拆分为两组

4(how many line) 
2 1 
3 7 
8 0 
3 7 

我想阵列1包含(在一条线上第二数目)(在一条线上firt数)

{2 
3 
8 
3} 

阵列2包含

{1 
7 
0 
7} 

如何我可以这样做吗?只是好奇...这是一个代码不起作用..

ifstream ifs("sth.txt"); 
int g; 
ifs>>g; 
int girl[g]; 
int boy[g]; 
for(int i=0;i<2*g,i++;){ 
if (i%2==0)ifs>>gil[g]; 
if (i%2==1)ifs>>boy[g];} 
cout<<boy[1]; 
+1

你的数组声明无效C++(还);他们是GCC特定的扩展。改用'std :: vector'。 –

回答

2
ifstream ifs("sth.txt"); 
int g; 
ifs>>g; 
int girl[g]; 
int boy[g]; 
for(int i=0;i<g,i++;){ 
    ifs>>girl[i]; 
    ifs>>boy[i]; 
} 
cout<<boy[0]; 

您正在阅读girl[g]boy[g]而不是0..(g-1)

我也改变了阅读:在循环的一次迭代中两个inted insted 1。

最后,我改变了第一个数字(索引0)而不是第二个元素boy

+0

但是有2g整数对不对? – user2604063

+0

当然,但只是比较简单的Ari的代码是多少比你的。没有内部模数的ifs。你有g行数字,每行都包含两个不同的数字。让循环迭代每行一次更有意义,并且一个接一个地执行两个不同的事情,而不是循环迭代每个数字一次,并在每次迭代中决定要做什么。 –

+0

@ user2604063是的,我们g次读取两个数字,所以我们正在读取2g数字。 – Ari

-1
ifstream ifs("sth.txt"); 
int g; 
ifs>>g; 
int girl[g]; 
int boy[g]; 
for(int i=0;i<g,i++;){ 
    ifs>>gil[i]; 
    ifs>>boy[i]; 
} 
cout<<boy[0]; 

int a =0; b = 0; 
for(int i=0;i<g;i++){ 
    if(i%2) ifs>>boy[b++]; 
    else ifs>>girl[a++]; 
} 

for(int i=1;i<=g;i+=2){ 
    ifs>>boy[(i-1)/2]; 
    if(i+1<=g) 
     ifs>>girl[(i-1)/2]; 
} 

std::string str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>()); 
for(int i=0;i<g;i++){ 
    fscanf(str,"%d %d",boy[i],girl[i]); 
} 
+0

您最后的解决方案不起作用。 – Ari

+0

现在应该工作。 – Lemonade

+0

你正在读第一个g/2数字到'girl',然后是第二个g/2数字到'boy'。它不能这样工作。你需要读一个数字给女孩,一个给男孩,等等。 – Ari

相关问题