C ++获取总文件行号

时间:2013-10-02 15:01:56

标签: c++ get numbers size line

我可以使用一个函数来获取C++中的总文件行号,还是必须由for循环手动完成?

#include <iostream>
#include <ifstream>

ifstream aFile ("text.txt");
if (aFile.good()) {
//how do i get total file line number?

}

的text.txt

line1
line2
line3

7 个答案:

答案 0 :(得分:12)

我会这样做:

   ifstream aFile ("text.txt");   
   std::size_t lines_count =0;
   std::string line;
   while (std::getline(aFile , line))
        ++lines_count;

或者简单地说,

  #include<algorithm>
  #include<iterator>
  //...
  lines_count=std::count(std::istreambuf_iterator<char>(aFile), 
             std::istreambuf_iterator<char>(), '\n');

答案 1 :(得分:10)

没有这样的功能。可以通过阅读整行来完成计数

std::ifstream f("text.txt");
std::string line;
long i;
for (i = 0; std::getline(f, line); ++i)
    ;

关于范围的说明,变量i必须在for之外,如果您想在循环后访问它。


您也可以阅读字符并检查换行符

std::ifstream f("text.txt");
char c;
long i = 0;
while (f.get(c))
    if (c == '\n')
        ++i;

答案 2 :(得分:2)

我担心你需要像这样写自己:

int number_of_lines = 0;
 std::string line;
 while (std::getline(myfile, line))
        ++number_of_lines;

 std::cout << "Number of lines in text file: " << number_of_lines;

答案 3 :(得分:1)

有一个计数器,初始化为零。逐行读取行,同时增加计数器(行的实际内容不感兴趣,可以丢弃)。完成后,没有错误,计数器是行数。

或者您可以将所有文件读入内存,并计算大量文本“数据”中的换行符。

答案 4 :(得分:1)

https://stackoverflow.com/a/19140230/9564035 中的解决方案很好,但没有提供相同的输出。 如果您只想计算以 '\n' 结尾的行,请使用

#include<algorithm>
#include<iterator>
//...
    ifstream aFile ("text.txt");
    lines_count=std::count(std::istreambuf_iterator<char>(File), 
    std::istreambuf_iterator<char>(), '\n');

如果您还想计算未以 '\n'(最后一行)结尾的行,您应该使用 getLine 解决方案

ifstream aFile ("text.txt");
std::size_t lines_count =0;
std::string line;
while (std::getline(aFile , line))
   ++lines_count;

请注意,如果您之前从文件中读取,您应该为 file.seekg(std::ios_base::beg);

设置指向文件开头的指针

答案 5 :(得分:0)

快速的方式然后上面的解决方案像P0W一个 每100mb节省3-4秒

std::ifstream myfile("example.txt");

// new lines will be skipped unless we stop it from happening:    
myfile.unsetf(std::ios_base::skipws);

// count the newlines with an algorithm specialized for counting:
unsigned line_count = std::count(
    std::istream_iterator<char>(myfile),
    std::istream_iterator<char>(), 
    '\n');

std::cout << "Lines: " << line_count << "\n";
return 0;

答案 6 :(得分:-1)

只需复制并运行。

#include <stdio.h>
#include <bits/stdc++.h>

using namespace std;

int main()
{
    fstream file;
    string filename = "sample input.txt";
    file.open(filename.c_str()); //read file as string 
    int lineNum = 0;
    string s;
    if (file.is_open())
    {
        while (file.good())
        {
            getline(file, s);
            lineNum++;
            cout << "The length of line number " << lineNum << " is: " << s.length() << endl;
        }
        cout << "Total Line : " << lineNum << endl;
        file.close();
    }

    return 0;
}