这是一道微软面试题。
使用 C 读取文件的最后 n 行(精确地)
实现这一目标的方法有很多,但其中很少有:
-> 最简单的是,在第一遍中,计算文件中的行数,在第二遍中显示最后 n 行。
-> 或者可以为每一行维护一个双向链表,并通过向后遍历链表直到第 n 个最后节点来显示最后 n 行。
-> 实现一些类似 tail -n fname 的东西
-> 为了进一步优化它,我们可以使用长度为 n 的双指针,并且以循环方式动态存储每一行,直到到达文件末尾。
例如,如果文件中有 10 行并且想要读取最后 3 行。然后我们可以创建一个缓冲区数组作为 buf[3][] ,并且在运行时将继续以循环方式分配和释放缓冲区,直到到达最后一行并保留一个计数器来了解数组的当前索引。
任何人都可以帮助我提供更优化的解决方案,或者至少指导我是否上述任何方法可以帮助我获得正确的答案或此类问题的任何其他流行的方法/方法。
您可以使用队列并存储在此队列中看到的最后 n 行。当您看到 eof 时,只需打印队列即可。
另一种方法是从文件末尾向开头读取 1024 字节的块。当你发现时就停下来n
\n
字符并打印出最后一个n
lines.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)