C++获取文件行总数

C++ Get Total File Line Number

本文关键字:文件 获取 C++      更新时间:2023-10-16

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

#include <iostream>
#include <ifstream>
ifstream aFile ("text.txt");
if (aFile.good()) {
//how do i get total file line number?
}

文本.txt

line1
line2
line3

我会这样做:

   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');

没有这样的函数。计数可以通过读取整行来完成

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;

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

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;

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

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

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

快速的方法,然后高于 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;

只需复制它并运行。

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