如何读取txt文件中的数据,并把它存在二维数组中

如题所述

#include "stdafx.h"
#include "iostream"
#include < fstream >
using namespace std;

int main(int argc, char* argv[])
{
ifstream infile;
infile.open ("tt.txt");
if(!infile)
cout<<"error"<<endl; //判断文件是被成功打开
float num; //定义文件中的数据类型
char p; //定义一个字符读取文件中的空格和/或回车符
int M=1; //这里首先定义为1是因为最后一行的结束符是EOF,所以用'\n'来判断行的话, //最后一行会漏悼。所以先把它定义为1,也就相当于加上了最后一行!
int N=0;
while(!infile.eof()) //每次读入之前都要判断是否到了文件末
{
do{
infile.get (p);
if(p=='\n')
{
M++; //统计行数;
N=0; //一个新行开始时,列数置为0
cout<<endl; //一行之后输出一个换行符
}
}while(isspace((int)p) && !infile.eof ());//结束条件是读入的是空格或已到达文件末
N++; //统计列数
infile.putback (p); // 如果前面读入的不是空格或回车符,则要把刚才读入的字符返回到文件流中!
infile>>num; // 读入一个数
cout<<num<<" "; // 输出刚才读入的数据
}
infile.close (); // 关闭文件
return 0;
}

这里面的一个问题是,如果要把这些数据保存在二维数组中,那么一种方法是先定义好一个数组,但问题通常开始并不知道文件中数据的维数,所以也就不好先定义好数组。

如何利用上面程序中统计出来的维数M,N实现任意维数的数据读入,这可能要利用到动态分配数组!但是动态分配数组好像又只能分配一维数组的空间!怎么实现二维数组的动态分配呢?

动态二维数组的实现:

int **arr;
arr=new int *[M];
for(int i=0;i<M;i++)
arr[i]=new int[N];

这样就可以实现(M,N)大小的数组!这样M,N的值就不一定要事先知道!
温馨提示:答案为网友推荐,仅供参考