C++中如何读入多组多行多列数据?

数据文件例子:test.txt
Frame
3.0 12.0 20.0
1.0 7.0 7.0
15.0 21.0 4.0
Frame
2.0 2.0 15.0
1.0 12.0 3.0
11.0 2.0 23.0
Frame
2.0 2.0 15.0
1.0 12.0 3.0
11.0 2.0 23.0
例子中共有k(k=3)组数据,每组数据n行(n=3),m列(n=3)。
想把它读入a1[k][n],a2[k][n],a3[k][n]数组中,用二维数组保存,要求数组第一个下标对应的是组数k,而第二个下标对应的是行数n,数组名已经区分了列数(实际中代表不同类型的数据,所以用不同数组明区分,后面好进行处理),这里是3列所以用了三个数组a1,a2,a3。
我需要有具体的源代码。
上面的代码确实能够读入原先的输入文件,但如果数组下面形式如何读入呢? text.txt
Steps
1
Atom Number
100
Frame c1 c2 c3
3.0 12.0 20.0
1.0 7.0 7.0
15.0 21.0 4.0
............................100 rows
Steps
2
Atom Number
100
Frame c1 c2 c3

2.0 2.0 15.0
1.0 12.0 3.0
11.0 2.0 23.0
............................100 rows
........................................................以上为2组数据,实际可能有上万组
该如何用C++读入。

C/C++ 数组元素排列应当是 a[行][列],
元素顺序:a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2],a[2][0],a[2][1],a[2][2].
程序里用正确的排列,未按你说的顺序:“第二个下标对应的是行数”

#include <fstream>
#include <iostream>
using namespace std;

main(){
int i,j;
float a1[3][3],a2[3][3],a3[3][3];
char frame[256];
int k=3,n=3,m=3;

ifstream fin;
fin.open("test.txt");

if (!fin)
{cout<<"open error !"<<endl;return 0;}

fin>>frame; // 读字符串 frame
for(j=0;j<n;j++){for(i=0;i<m;i++)fin>>a1[j][i];} // 读数据

fin >> frame; // 读字符串 frame
for(j=0;j<n;j++){for(i=0;i<m;i++)fin >>a2[j][i];} // 读数据

fin >> frame; // 读字符串 frame
for(j=0;j<n;j++){for(i=0;i<m;i++)fin >>a3[j][i];} // 读数据

fin.close();

cout << "I read a1:"<<endl;
for(j=0;j<n;j++){
for(i=0;i<m;i++) cout << a1[j][i]<< " ";
cout << endl;
};

cout << "I read a2:"<< endl;
for(j=0;j<n;j++){
for(i=0;i<m;i++) cout << a2[j][i]<< " ";
cout << endl;
};

cout << "I read a3:"<<endl;
for(j=0;j<n;j++){
for(i=0;i<m;i++) cout << a3[j][i]<< " ";
cout << endl;
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-02
啥情况而定,当然for循环肯定是要用到,不清楚具体的问题是什么
相似回答