c++ - 查找行尾位置的有效方法

标签 c++ ifstream end-of-line

我正在使用 C++、ifstream 和文本文件。我正在寻找每行结尾的位置,因为我需要从行尾读取 n 个字符。

目前,我正在读取每个字节并测试它是否对应于 Unix 换行符 (LF)。

不幸的是,输入通常是长文本,我的方法并不快。

有没有更快的方法?

最佳答案

如果您正在寻找原始速度,我会内存映射文件并使用类似 strchr 的东西来查找换行符;

p = strchr(line_start, '\n');

那么只要 p 不是 NULL 或内存区域中的第一个字符,您就可以使用 p[-1] 读取换行符前的字符。

注意如果文件可能包含'\0' 字符,那么您应该使用memchr。事实上,这可能是可取的,因为它允许您指定缓冲区(内存区域)的大小。

关于c++ - 查找行尾位置的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9620681/

相关文章:

c++ - Matlab rand 和 c++ rand()

c++ - 如何将字节形式的输入写入输出文件?

c++ - 无法打开文件 C++

c++ - 为什么我的文件是空的?

C++ - 使用 >> 运算符读取文件直到到达行尾

java - 在java中打印直到行尾

regex - Perl 正则表达式 anchor $ 实际上如何处理尾随换行符?

c++ - 需要提高断字速度的建议(动态规划)

c++ - 继承错误: expected class-name before '{' token

c++ - 就像,虚函数我们可以在 C++ 中使变量成为虚函数吗?