c++函数式编程:统计文件字符串,文件流

头文件

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>

统计方法

int count_lines(const std::string &filename)
{
    std::ifstream in{filename};
    return std::count(std::istreambuf_iterator<char>{in},std::istreambuf_iterator<char>{},'\n');
}

std::istreambuf_iterator

读取输入缓冲区,板参数只能是char和wchar_t类型,std::istreambuf_iterator{}即默认构造的为end,例子如下

读取字符串

void readString()
{
    std::istringstream ins{"abcd"};
    std::string str(std::istreambuf_iterator<char>{ins},std::istreambuf_iterator<char>{});
    std::cout<<str<<std::endl;
}

扩展:istringstream类用于执行C++风格的串流的输入操作

例子:分割被空格、制表符等符号分割的字符串,类型转换

    std::istringstream ins{"123 456 789"};
    int nTmp = 0;
    while(ins >> nTmp){
         std::cout<<nTmp<<std::endl;
    }

扩展:ostringstream 类用于执行C风格的串流的输出操作

void writeString()
{
    std::ostringstream os{"123 456",std::ios_base::ate};
    os << " 789";
    std::cout<<os.str()<<std::endl;
}

扩展: stringstream类同时可以支持C风格的串流的输入输出操作

void readwriteString()
{
    std::stringstream streeam;
    streeam << "123 ";
    streeam << "789";
    int nTmp = 0;
    while(streeam >> nTmp){
         std::cout<<nTmp<<std::endl;
    }
    std::cout<<streeam.str()<<std::endl;
}

读取所文件所有内容到字符串,包括\n等空白字符

void readAllText(const std::string &filename)
{
    std::ifstream in{filename};
    std::string str(std::istreambuf_iterator<char>{in},std::istreambuf_iterator<char>{});
    std::cout<<str<<std::endl;
}

读取所文件所有内容到容器,包括\n等空白字符

void readAllTextVec(const std::string &filename)
{
    std::ifstream in{filename};
    std::vector<char> vec{std::istreambuf_iterator<char>{in},std::istreambuf_iterator<char>{}};
    std::cout<<vec.size()<<std::endl;
}

有重载++、*

void readAllTextCount(const std::string &filename)
{
    unsigned int nCount = 0;
    std::ifstream in{filename};
    std::istreambuf_iterator<char>  it{in},end;
    for(;it != end;it++){
        if(*it == '\n'){
            nCount++;
        }
    }
    std::cout<<"nCount:"<<nCount<<std::endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值