36

如何使用标准类计算行数,fstream以及ifstream

4

8 回答 8

118

这个怎么样 :-

  std::ifstream inFile("file"); 
  std::count(std::istreambuf_iterator<char>(inFile), 
             std::istreambuf_iterator<char>(), '\n');
于 2010-06-18T20:26:55.410 回答
13

您逐行读取文件。计算你阅读的行数。

于 2010-06-18T20:21:24.483 回答
12

这是 Craig W. Wright 答案的正确版本:

int numLines = 0;
ifstream in("file.txt");
std::string unused;
while ( std::getline(in, unused) )
   ++numLines;
于 2010-06-18T20:48:25.547 回答
2

@Abhay 之后的内核方法

我完成的完整代码:

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 情况处理。

于 2016-06-08T07:53:17.447 回答
0
int aNumOfLines = 0;
ifstream aInputFile(iFileName); 

string aLineStr;
while (getline(aInputFile, aLineStr))
{
    if (!aLineStr.empty())
        aNumOfLines++;
}

return aNumOfLines;
于 2015-07-14T14:34:12.367 回答
0

这对我有用:

  std::ifstream fin{"source.txt"};
  std::count(std::istream_iterator<char>(fin >> std::noskipws), {}, '\n');
于 2021-12-11T21:48:19.197 回答
-3

int numLines = 0;
ifstream in("file.txt");
//while ( ! in.eof() )
while ( in.good() )
{
   std::string line;
   std::getline(in, line);
   ++numLines;
}

如果文件的最后一行不以换行符结尾,那么如何处理文件的最后一行是一个问题。根据你在做什么,你可能想要计算它,你可能不会。这段代码很重要。

见:http ://www.cplusplus.com/reference/string/getline/

于 2010-06-18T20:31:38.897 回答
-15

将文件大小除以每行的平均字符数!

于 2010-06-18T21:54:14.370 回答