苏州大学计科院2016C++考试(第二次)

按以下要求编写程序
题目说明
LRC 文件是一种基于纯文本的歌词专用格式文档,可以为MP3播放器和播放软件的显示歌词功能提供规范数据。本次考试的程序用于将一个手工编制的歌词信息转化为标准的LRC文件。
请各位考生从课程信息发布网站下载数据文件in.txt,然后将该数据文件手动保存在D盘根目录下。该文件是一个歌词的原始数据文件,数据以文本形式存储,每行包含4列数据,格式如下:A列为分钟,B列是秒,C列是毫秒,D列是歌词,列之间用空格隔开,D列中没有空格和tab符号。下面显示了一个局部样例:

A  B C      D
0  0 0  张学友-情网
0 17 0  请你再为我点上一盏烛光,
0 62 0  时间错误的歌词
0 25 0  因为我早已迷失了方向,
0 33 0  我掩饰不住的慌张,
0 36 0  在迫不急待地张望,
0 41 0  生怕这一路是好梦一场。
0 48 0  而你是一张无边无际的网,

现有歌词类CLyric,用于存储时间和歌词,该类的数据成员定义如下:

class CLyric
{
private:
	int 	m_Minute;			//分钟
	int 	m_Second;			//秒
	int 	m_Millisecond; 	//毫秒
	string m_Sentence;		//一句歌词
	int	  	m_SequenceId;		//从1开始的流水序号,每个对象不重复
};

请按要求依次完成如下操作:

  1. 为CLyric类添加一个携带四个参数的构造函数,前三个参数分别用于初始化分钟、秒和毫秒,第四个参数用于初始化歌词。
    注意:
    如果前三个参数有一个取值不合法,那么时间相关的三个数据成员全部初始化为0。分钟、秒的取值范围为[0,59],毫秒的取值范围[0,999]。
    流水序号的初始化和构造函数参数无关,在构造函数中需要保证对象的流水序号是自动增长的,每次新产生的对象的流水序号比之前用过的最大流水序号大1。可以添加静态数据成员m_MaxId协助完成该需求。
  2. 为CLyric类添加一个拷贝构造函数实现对象复制,注意:流水序号不能直接复制。
  3. 为CLyric类添加五个成员函数getMinute、getSecond、getMillisecond、getSentence和,getSequenceId分别用于获取(返回)分钟、秒、毫秒、歌词和流水序号值。
  4. 为CLyric类重载流输出运算符,用于显示一条歌词信息,格式如下 [MM:SS.PPP] 歌词文本
    时间用一对英文方括号括起来,中间的分割冒号和点都是英文字符,其中前两个成员占两位,毫秒占三位,不足前面用0填充,时间和歌词文本之间用一个空格分割。
  5. 为CLyric类重载后自增运算符用于将秒值加1。注意:先增加秒值,如果超过59,秒值清零,分钟加1;如果分钟值超过59,分钟值清零;毫秒保持不变。
  6. 为CLyric类重载加上int数据的加号运算符,所加的整数是毫秒数。注意:该整数为非负数,可能大于1000,同样需要处理进位的问题。
  7. 编写函数readSong,用于实现把D盘的in.txt中的数据读取到向量song中保存,读取时需要舍弃异常的数据(分钟、秒或者毫秒取值不合法),并返回异常数据的行数。
  8. 编写函数showTopN用于把向量song中的前n条歌词数据显示在屏幕上,每条歌词显示格式和第4步格式相同。注意:当向量中数据不足n条时显示
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值