13.1 Write a method to print the last K lines of an input file using C++.

这道题让我们用C++来打印一个输入文本的最后K行,最直接的方法是先读入所有的数据,统计文本的总行数,然后再遍历一遍打印出最后K行。这个方法需要读两遍文件,我们想使用一种更简便的方法,只需要读取一遍文本就可以打印出最后K行,这里我们使用一个循环数组Circular Array,原理是我们维护一个大小为K的字符串数组,当数组存满后,新进来的数据从开头开始存,覆盖原有的数据。这样当我们读完整个文本,最后K行就保存在了这个大小为K的字符串数组,只不过顺序不相同,我们始终要有个变量来记录最后一个进来的数据的位置,这样我们就可以按原文本的顺序打印出最后K行了,参见代码如下:

class Solution {
public:
void printLast5Lines(char *fileName) {
const int K = ;
ifstream file(fileName);
string L[K];
int size = ;
while (file.good()) {
getline(file, L[size % K]);
++size;
}
int start = size > K ? (size % K) : ;
int cnt = min(K, size);
for (int i = ; i < cnt; ++i) {
cout << L[(start + i) % K] << endl;
}
}
};

[CareerCup] 13.1 Print Last K Lines 打印最后K行的更多相关文章

  1. POJ 3390 Print Words in Lines(DP)

    Print Words in Lines Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1624 Accepted: 864 D ...

  2. 剑指offer19:按照从外向里以顺时针的顺序依次打印出每一个数字,4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

    1 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印 ...

  3. 如何在Python中让两个print()函数的输出打印在一行内?

    1.两个连续的print()函数为什么在输出时内容会分行显示? 解:print()中有两个默认参数sep和end,其中sep是代替分隔符,end是代替末尾的换行符,默认使用‘,’代替空格,且默认末尾加 ...

  4. JZ-060-把二叉树打印成多行

    把二叉树打印成多行 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目链接: 把二叉树打印成多行 代码 import java.util.ArrayList; impor ...

  5. [Swift]LeetCode373. 查找和最小的K对数字 | Find K Pairs with Smallest Sums

    You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. Define ...

  6. 剑指Offer:二叉树打印成多行【23】

    剑指Offer:二叉树打印成多行[23] 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目分析 Java题解 package tree; import java.uti ...

  7. php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误)

    php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误) 一.总结 要点:a.层次遍历(队列)  b.层次遍历中的层次(孩 ...

  8. linux打印指定的行的内容

    使用sed打印第99行 sed -n '99,p' test.txt 使用awk打印第99行 awk 'NR==99' test.txt awk 'FNR==99' test.txt perl 完成 ...

  9. 剑指offer系列——59/60.按之字形顺序打印二叉树/把二叉树打印成多行

    Q:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. A:BFS,偶数层reverse vector&l ...

随机推荐

  1. 浅谈 sql 中数据的约束

    数据约束 --对用户操作表的数据进行约束 1.默认值 --当用户对使用默认值的字段不插入值的时候,就使用默认值 1)对默认值字段插入null是可以的. 2)对默认值字段可以插入非null [例如:ad ...

  2. 读书笔记——Windows环境下32位汇编语言程序设计(2)配置环境

    一直想买本罗云彬的Win32汇编书,现在终于出典藏版了,就买了本,读一读,涨涨姿势. 我把笔记本光驱拆下来添加了个硬盘,现在想装回去发现坏了,所以守着CD盘,代码却用的是第三版的,这真是个悲剧啊. - ...

  3. android自定义radiobutton样式文字颜色随选中状态而改变

    主要是写一个 color selector 在res/建一个文件夹取名color res/color/color_radiobutton.xml <selector xmlns:android= ...

  4. C++ string的大小写转换

    将一个string转换成大写或者小写,是项目中经常需要做的事情,但string类里并 没有提供这个方法.自己写个函数来实现,说起来挺简单,但做起来总让人觉得不方便.打个比方:早上起来想吃个汉堡,冰箱里 ...

  5. Oracle错误日志:ORA-00257

    今天下午刚启动程序,就报以下错误: Caused by: java.sql.SQLException: ORA-00257: 归档程序错误.在释放之前仅限于内部连接. 经查,是oracle数据库日志满 ...

  6. 浅析selenium的page object模式

    selenium目前比较流行的设计模式就是page object,那么到底什么是page object呢,简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好 ...

  7. 【温故而知新-Javascript】理解 DOM

    DOM(Document Object Model,文档对象模型)允许我们用 JavaScript 来探查和操作 HTML 文档里的内容.它对于创建丰富性内容而言是必不可少的一组功能. 1. 理解文档 ...

  8. ZBrush中的笔刷该怎样制作

    ZBrush给用户提供了许多的常用笔刷,我们可以使用这些笔刷自由地发挥创意.为了让雕刻速度更快,模型刻画更细致我们常常也会创建自定义笔刷,本文教您在ZBrush中制作笔刷. 查看更多内容请直接前往:h ...

  9. (转)priority_queue的用法

    priority_queue调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法实现,也算是堆的另外一种形式.先写一个用 STL 里面堆算法实现的与真正的 ...

  10. linux下清除Squid缓存的方法记录

    在日常运维工作中,只要用到squid缓存服务,就会常常被要求清理squid缓存.比如公司领导要求删一篇新闻,新闻是生成的静态.运维人员把服务器上静态的新闻页面删除了后,不料代理服务器上缓存还有.缓存服 ...