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