如何在C ++中计算文件的行数?

时间:2010-06-18 20:20:00

标签: c++ file-io io fstream ifstream

如何使用标准类fstreamifstream计算行数?

7 个答案:

答案 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)

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

答案 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;
}

如果文件的最后一行没有以换行符结尾,则会有一个问题。根据你正在做的事情,你可能想要数数,你可能不会。这段代码很重要。

请参阅:http://www.cplusplus.com/reference/string/getline/

答案 6 :(得分:-10)

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