今天整点技术性的东西。
例如:文件data.txt内容
1 轻 无 疼 烧 轻
2 轻 无 疼 正常 轻
通过C++ fstream和getline的方法将信息读到一个二维数组string data[][]
方法一:(适用于已知行数和列数,且要求以空格或制表符间隔)
#include <fstream>
#include <string>
using namespace std;
void main()
{
ifstream ifile("data.txt");
string data[2][6];
for(int i = 0; i < 2; i ++)
for(int j = 0; j < 6; j ++)
ifile>>data[i][j];
ifile.close();
}
方法二:(未知行数和列数 且 分割符不限于 空格)
#include <fstream>
#include <string>
#include <vector>
using namespace std;
typedef vector<vector<string>> vvs;
void main()
{
ifstream infile("data.txt");
infile>>noskipws;//不忽略空白且把每行最后那个'\n'也读进来
//判断行数和列数,文件中每列数据以空格隔开
int row, col, k;
row = col = 0;
char chr;
while(infile>>chr)
{
switch(chr)
{
case '\n': //判断读入字符是否为换行符
++ row; //是换行符则行数+1
col = 0; //是换行符则列数清零
break;
case ' ': //判断读入字符是否为空格
++ col; //则列数+1
break;
default:;
}
}
infile.close(); //关闭文本文件
row ++; col++; //读文件得到的行列数均加1才是真正的行列数(注意:文件最后没有空白行)
vvs data; // 定义二维字符串数组
data.resize(row);
for(k = 0; k < row; k ++)
data[k].resize(col);
ifstream infile2("data.txt");
int trow, tcol;
trow = tcol = 0;
string str;
while(trow < row)//循环比较,以行数作为限制
{
while(tcol < col-1)
{
getline(infile2,str,' '); //以空格为分隔对象,进行数据读入
data[trow][tcol] = str; //将空格前的数据保存到相应的字符串数组中
tcol++; //保存好数据后列数+1
}
getline(infile2,str,'\n'); //将回车符作为对象进行数据输入,以判断一行是否结束
data[trow][tcol] = str; //将回车符前面的数据读入到相应的字符串数组中
tcol = 0; //列数赋值为1,准备下一行的判断
trow ++; //行数+1
}
infile2.close();
}