C++中getline函数用法
getline() 语法:
istream &getline( char *buffer, streamsize num );
istream &getline( char *buffer, streamsize num, char delim );
用getline()读取字符到buffer中,buffer在代码中通常体现为一个字符数组,streamsize num是一次读入多少个字符, num - 1个字符已经读入, 当碰到一个换行标志, 碰到一个EOF, 或者任意地读入,直到读到字符delim。delim字符不会被放入buffer中。delim字符可以自已设定,默认为回车符'/n'
我的理解:
第一个参数为要存储的指定字符数组。
第二个参数为抽取、读取指定数目的字符。
第三个参数指定结束字符,默认为"\n";
#include <iostream.h>
#include<stdlib.h>
#include <iomanip.h>
#include <fstream.h>
using namespace std;
const int N=10;
int main()
{
char str[N];
ifstream fin;
fin.open("data.txt");
if (!fin)
{
cout<<"error "<<endl;
exit(1);
}
while(fin.getline(str,sizeof(str)))
{
cout<<str;
cout<<endl;
}
cout<<endl;
fin.clear();
cin.get();
return 0;
}
下面是另外整的实例
例如:文件data.txt内容
1 轻 无 疼 烧 轻
2 轻 无 疼 正常 轻
通过C++ fstream和getline的方法将信息读到一个二维数组string data[][]
方法一:(适用于已知行数和列数,且要求以空格或制表符间隔)
#include <fstream>
#include <iostream>
using namespace std;
#include <string>
int main()
{
ifstream ifile("data.txt");
string data[2][6];
int i,j;
//while(!ifile.eof())
//{
//ifile.getline(data,100);
for(i = 0; i < 2; i ++)
{
for(j = 0; j < 6; j ++)
{
ifile>>data[i][j];
cout<<data[i][j];
}
}
ifile.close();
}
方法二:(未知行数和列数 且 分割符不限于 空格)
#include <fstream>
#include <string>
#include <vector>
#include <iostream>
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();
}