将文本文件里面的矩阵数据读取到二位数组中,当矩阵数据的行数,列数已知时就比较简单,这里不再赘述;但矩阵的行数和列数未知时这时就需要将数据读取到动态数组中,如果一开始就申请很大的二维数组时,当数据很少时就会浪费空间;
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#include<cctype>
using namespace std;
int main()
{
int num;
char p;
vector<vector<int> > arr;
vector<int> temp_line;
ifstream fin("data.txt"); //需要读取矩阵数据的文件
while (fin.get(p))
{
do
{
if (p == '\n')
{
arr.push_back(temp_line);
temp_line.clear();
}
} while (isspace((int)p) && fin.get(p));
if (!fin)
break;
fin.putback(p); //将读取到的数据返回到输入流中,供下面的fin>>num可以继续读取数据
fin >> num;
temp_line.push_back(num);
}
arr.push_back(temp_line); //当文本中最后一行数据完后面就是文件结束符,并没有换行符,
fin.close(); //所以需要将最后一行的数据再填入到二维动态数组中
return 0;
}
---------------------------------------------------------------
从屏幕读取不定行数不定数目的数据,即从屏幕中读取矩阵数据:
#include<iostream>
#include<vector>
#include<cstring>
#include <sstream>
using namespace std;
int main(void)
{
vector<int> A; //输入第一行的数据到数组A
vector<int> B; //输入第二行的数据到数组B
int num;
string str;
int cnt = 0; //控制输入数据的行数,行数为已知的情况
while (getline(cin, str))
{
if (str.size() == 0)break; //控制输入数据的行数,行数为未知的情况
istringstream ist(str);
while (ist >> num)
{
if (cnt == 0)
{
A.push_back(num);
}
else
{
B.push_back(num);
}
}
cnt++;
if (cnt == 2)
break;
}
return 0;
}
博客参考: