C++中输入输出流getline()函数用法

转载:http://blog.csdn.net/dutmail/article/details/8685131 

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>
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();
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值