头文件
#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;
}