我可以使用一个函数来获取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
答案 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;
}