How to count lines of a file in C++?

后端 未结 7 967
故里飘歌
故里飘歌 2020-12-02 15:53

How can I count lines using the standard classes, fstream and ifstream?

相关标签:
7条回答
  • 2020-12-02 16:22

    Divide the file size by the average number of characters per line!

    0 讨论(0)
  • 2020-12-02 16:23

    kernel methods following @Abhay

    A complete code I've done :

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

    it will not change the origin file stream state and including '\n'-miss situation processing for the last line.

    0 讨论(0)
  • 2020-12-02 16:31

    This is the correct version of Craig W. Wright's answer:

    int numLines = 0;
    ifstream in("file.txt");
    std::string unused;
    while ( std::getline(in, unused) )
       ++numLines;
    
    0 讨论(0)
  • 2020-12-02 16:35

    How about this :-

      std::ifstream inFile("file"); 
      std::count(std::istreambuf_iterator<char>(inFile), 
                 std::istreambuf_iterator<char>(), '\n');
    
    0 讨论(0)
  • 2020-12-02 16:35
    
    int numLines = 0;
    ifstream in("file.txt");
    //while ( ! in.eof() )
    while ( in.good() )
    {
       std::string line;
       std::getline(in, line);
       ++numLines;
    }
    

    There is a question of how you treat the very last line of the file if it does not end with a newline. Depending upon what you're doing you might want to count it and you might not. This code counts it.

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

    0 讨论(0)
  • 2020-12-02 16:45
    int aNumOfLines = 0;
    ifstream aInputFile(iFileName); 
    
    string aLineStr;
    while (getline(aInputFile, aLineStr))
    {
        if (!aLineStr.empty())
            aNumOfLines++;
    }
    
    return aNumOfLines;
    
    0 讨论(0)
提交回复
热议问题