用C++读取一个TXT文件中的二维数组

我现在有一个txt文件,文件里面是一个二维数组,数组中的每行是用换行(回车)分开的的,每一行中的元素是用空格分开的。我现在想用C++读这个TXT文件,然后把其中的元素输出成一个vector数组,就是std::vector<std::vector<...>>这样的形式的。这个要怎么办呢?求助求助!!!!
举个例子啊:
-33 -36 25 387 -209...
22 9 987 -97 -88...
...
...
是一个几百乘几百的大的二维数组。

数据文件命名为data.txt,放置到应用程序同文件夹下。
---------------C++处理方法

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include<ctype.h>
#include <stdlib.h>
using namespace std;
inline void makeitem(vector<int>& item,istringstream &in );
int main(){
string line;
ifstream f("data.txt");
if(!f.is_open()){cout<<"error openfile"<<endl;return 1;}
vector<int> item;
vector<vector<int> > arr;
int num=0;
while(!f.eof()){
int num=0;
getline(f,line);
if(line.empty())continue;
istringstream input(line);
item.clear();
while(!input.eof()){
input>>num;
item.push_back(num);
}
arr.push_back(item);
}
f.close();
//output arr
for (int i=0;i<arr.size();i++){
item=arr[i];
for (int j=0;j<item.size();j++){
cout<<item[j]<<" ";
}
cout<<endl;
}
}

---------------c 字符串处理方法
#include <iostream>
#include <fstream>
#include <vector>
#include<ctype.h>
#include <stdlib.h>
using namespace std;
inline void makeitem(vector<int>& item,char *buf );
int main(){
char *buf=new char[1024];
ifstream f("data.txt");
if(!f.is_open()){cout<<"error openfile"<<endl;return 1;}
vector<int> item;
vector<vector<int> > arr;
int num=0;
while(!f.eof()){
f.getline(buf,1024);
makeitem(item,buf);
arr.push_back(item);
}
for (int i=0;i<arr.size();i++){
item=arr[i];
for (int j=0;j<item.size();j++){
cout<<item[j]<<" ";
}
cout<<endl;
}
}
inline char* nextnum(char* buf,char *p){
while(!isspace(*p)&&*p){
++p;
}
while(isspace(*p)){
++p;
}
return p;
}
inline void makeitem(vector<int>& item,char *buf ){
item.clear();
char *p=buf;
int num=0;
while(isspace(*p)){p++;}//跳过每行开始的空格。
while(*p){
num=atoi(p);//获取当前指针下方数字;
if(*p){item.push_back(num);}
p=nextnum(buf,p);//定位到下一个数字;
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-08-03
#include <stdio.h>

#include <string.h>
#include <vector>
#include <iostream>
using namespace std;

void main()
{
vector< vector< int > > m;
FILE *fp = fopen( "C:\\1.txt", "rt" );
if ( !fp )
return;
char buf[30000+1];
while ( !feof( fp ) && fgets( buf, 30000, fp ) )
{
if ( buf[ strlen(buf) - 1] == 10 )
buf[ strlen(buf) - 1] = 0;
vector< int > v;
char* token = strtok( buf, " " );
while( token )
{
v.push_back( atoi( token ) );
token = strtok( NULL, " ");
}
if ( !v.empty() )
m.push_back( v );
}
fclose( fp );
}
第2个回答  2012-08-03
#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <string>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[]) {
string filename;
vector< vector<int> > ivec;
int lineno = 0;
int numno = 0;
if (argc == 2) {
filename = argv[1];
} else if (argc > 2) {
cerr << "参数错误" << endl;
return EXIT_FAILURE;
} else {
cout << "输入文件名" << endl;
cin >> filename;
}
ifstream in(filename.c_str());
if (!in) {
cerr << "打开文件失败" << endl;
return EXIT_FAILURE;
}
string line;
stringstream sstm;
int val;
while (getline(in, line)) {
sstm << line;
vector<int> tvec;
while (sstm >> val) {
tvec.push_back(val);
++numno;
}
if (sstm.eof()) {
sstm.clear();
}
if (!sstm) {
cerr << "格式化数字错误" << endl;
return EXIT_FAILURE;
}
ivec.push_back(tvec);
++lineno;
}
if (in.eof()) {
in.clear();
}
if (!in) {
cerr << "读取文件错误" << endl;
return EXIT_FAILURE;
}
cout << "读取了 " << lineno << " 行, "
<< "共 " << numno << " 个数字" << endl;
return EXIT_SUCCESS;
}
第3个回答  2015-09-29
#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <string>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[]) {
string filename;
vector< vector<int> > ivec;
int lineno = 0;
int numno = 0;
if (argc == 2) {
filename = argv[1];
} else if (argc > 2) {
cerr << "参数错误" << endl;
return EXIT_FAILURE;
} else {
cout << "输入文件名" << endl;
cin >> filename;
}
ifstream in(filename.c_str());
if (!in) {
cerr << "打开文件失败" << endl;
return EXIT_FAILURE;
}
string line;
stringstream sstm;
int val;
while (getline(in, line)) {
sstm << line;
vector<int> tvec;
while (sstm >> val) {
tvec.push_back(val);
++numno;
}
if (sstm.eof()) {
sstm.clear();
}
if (!sstm) {
cerr << "格式化数字错误" << endl;
return EXIT_FAILURE;
}
ivec.push_back(tvec);
++lineno;
}
if (in.eof()) {
in.clear();
}
if (!in) {
cerr << "读取文件错误" << endl;
return EXIT_FAILURE;
}
cout << "读取了 " << lineno << " 行, "
<< "共 " << numno << " 个数字" << endl;
return EXIT_SUCCESS;
第4个回答  2012-08-03
逐行逐空格的atoi即可。

c++将txt文件读取并写入二维数组
include <iostream>#include <cstdio>#include <cstring>#include <string> using namespace std; int main (){ string PATH(""); int row = 0,col = 0; printf("input path:\\n"); getline(cin,PATH); printf("input rows and columns\\n"); scanf("%d%d",&row,&c...

C++编程 调用一个txt文件里面的二维数组,然后求这个二维数组的鞍点和极...
printf("第%d行第%d列为鞍点:%d\\n",py + 1,px + 1,max);} } }

分别用C语言和C++读取txt文件到一个二维数组
int **a;\/\/定义二维数组 int i,j;int row=0,column=0;\/\/行,列 char ch;\/\/打开文件 if((fp=fopen("1.txt","r"))==NULL){ printf("open error\\n");return 1;} \/\/统计列数 while(!feof(fp)&&(ch=fgetc(fp))!='\\n')if(ch==',')column++;column++;if(column==1){...

c++中怎么将文件数据读入二维数组
include <iostream>#include <cstdio>#include <cstring>#include <string> using namespace std; int main (){ string PATH(""); int row = 0,col = 0; printf("input path:\\n"); getline(cin,PATH); printf("input rows and columns\\n"); scanf("%d%d",&row,...

C++编程。怎么从文本文件中读取数据并存入二维数组
我的两列数据 0 3470 1 3482 2 3497 3 3513 4 3527 5 3529 6 3556 7 3579 8 3580 一共1080行 #include<iostream>#include<fstream> #include <string>#include <stdio.h>using namespace std; int main(){int x[1080][2];int...

C++:读写数据(.text文件与数组)
读取文件数据到数组中,对于一维数组,直接使用read()函数读取文件数据即可。对于二维数组,先读取一维数据到数组中,然后根据数组大小进行二维数组填充。对于一维数组,可以这样读取:首先确定数组大小,然后使用read()函数读取相应数量的元素到数组中。读取二维数组时,同样需要先读取一维数据,然后根据数组维度...

C++中如何读取记事本中的数据,并另存为二维数组?
fp = fopen(filename,"rt");if(fp == NULL) { printf("不能打开数据文件:%s",filename);exit(1);} for(i = 0;i < M;i++) { fscanf(fp,"%d",&code);for(j = 0;j < N;j++) { fscanf(fp,"%f",&a[i][j]);printf("%8.2f",a[i][j]);} printf("\\n");} fclo...

c++ 怎么从文件中提取一行字符 存在二维数组中.
你的M是int 类型?? 如果要读入字符串 那你要用char M[4][4][100] 用三维的 而且输入使用 fscanf(fp,"%s",M[i][j]);不要加& 初始化 可以用 memset(M,0,sizeof(M)); 要包含头文件string.h

C++二维数组的输入和输出
include<stdlib.h> int main(){ int m,n,i,j;int **x;scanf("%d%d",&m,&n);x=(int **)malloc(sizeof(int *)*m);for(i=0;i<m;i++){ x[i]=(int *)malloc(sizeof(int)*n);} for(i=0;i<m;i++){ for(j=0;j<n;j++){ scanf("%d",&x[i][j]);} } for(...

C++ 如何格式化读取txt文本文档
每一行的数据一样多 你的思路有问题,不必非要用n个数组来存 你先double shuzu[1000]={0};然后读取第一行数据,判断有多少个数,是a或是b不用管,数出数来存入shuzu[0],然后从第二行你依次读入数据,按次序存入shuzu,就行了,以后读时,得到第一个数,然后间隔取,就可以还原了。

相似回答