c++ getline不是非得get one line

字符串string头文件中有个getline函数,看命名似乎是获取一行的意思。但对于输入流而言,getline并不意味所获取的数据必须以行结束符结尾。

getline函数可以有三个参数,第一个为输入流(如istream、ifstream或stringstream等)对象,第二个参数为需要保存到的对象,第三个参数即自定义的分隔符。

有了自定义的能力,getline便可以拓展抽象的行的概念。比如我们把逗号(,)作为一个行分隔符。

这有什么用呢?

比如我们把一张excel表的数据导出到文本文件中,使用了TAB字符作为每列数据的分隔符,那么我们就可以在一个数据行内,以处理行的类似方式循环处理每个列数据。比如一个成绩表:

姓名        性别        数学        语文        英语

张三        男        100        80        85

小李        女        100        92        90

小王        女        80        88        78

保存至内存的简单办法就是:

// 假定 成绩.txt 文件中不存在列名那一行
ifstream ifs("成绩.txt");

// 保存所有成绩记录
vector<vector<string> > records;

// 保存一行字符串
string row;

// 第一个getline,使用默认的换行符。
while(getline(ifs, row)) {
    stringstream ss(row);
    string col;


    vector<string> record;    

    // 第二个getline,使用tab跳格符即\t
    while(getline(ss, col, '\t')) {
        record.push_back(col);
    }

    records.push_back(record);
}

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值