如何使用标准类fstream
和ifstream
计算行数?
答案 0 :(得分:92)
这个怎么样: -
std::ifstream inFile("file");
std::count(std::istreambuf_iterator<char>(inFile),
std::istreambuf_iterator<char>(), '\n');
答案 1 :(得分:11)
您逐行阅读文件。 计算您阅读的行数。
答案 2 :(得分:10)
这是Craig W. Wright答案的正确版本:
int numLines = 0;
ifstream in("file.txt");
std::string unused;
while ( std::getline(in, unused) )
++numLines;
答案 3 :(得分:0)
内核方法
我完成的完整代码:
size_t count_line(istream &is)
{
// skip when bad
if( is.bad() ) return 0;
// save state
std::istream::iostate state_backup = is.rdstate();
// clear state
is.clear();
std::istream::streampos pos_backup = is.tellg();
is.seekg(0);
size_t line_cnt;
size_t lf_cnt = std::count(std::istreambuf_iterator<char>(is), std::istreambuf_iterator<char>(), '\n');
line_cnt = lf_cnt;
// if the file is not end with '\n' , then line_cnt should plus 1
is.unget();
if( is.get() != '\n' ) { ++line_cnt ; }
// recover state
is.clear() ; // previous reading may set eofbit
is.seekg(pos_backup);
is.setstate(state_backup);
return line_cnt;
}
它不会更改原始文件流状态,并包括最后一行的'\ n'-miss情况处理。
答案 4 :(得分:-2)
int aNumOfLines = 0;
ifstream aInputFile(iFileName);
string aLineStr;
while (getline(aInputFile, aLineStr))
{
if (!aLineStr.empty())
aNumOfLines++;
}
return aNumOfLines;
答案 5 :(得分:-3)
int numLines = 0;
ifstream in("file.txt");
//while ( ! in.eof() )
while ( in.good() )
{
std::string line;
std::getline(in, line);
++numLines;
}
如果文件的最后一行没有以换行符结尾,则会有一个问题。根据你正在做的事情,你可能想要数数,你可能不会。这段代码很重要。
答案 6 :(得分:-10)
将文件大小除以每行的平均字符数!