ZCMU--1554: AAAAA(C语言)

Description

lrc是英文lyric(歌词)的缩写,被用做歌词文件的扩展名。以lrc为扩展名的歌词文件可以在各类数码播放器中同步显示。LRC 歌词是一种包含着“*:*”形式的“标签(tag)”的、基于纯文本的歌词专用格式。这种歌词文件既可以用来实现卡拉OK功能(需要专门程序),又能以普通的文字处理软件查看、编辑。当然,实际操作时通常是用专门的LRC歌词编辑软件进行高效编辑的。

 lrc中的时间标签:

形式为"[mm:ss]"或"[mm:ss.ff]"(分钟数:秒数)。数字须为非负整数, 比如"[12:34.5]""[12:34]"。 它可以位于某行歌词中的任意位置。一行歌词可以包含多个时间标签(比如歌词中的迭句部分)。根据这些时间标签,用户端程序会按顺序依次高亮显示歌词,从而实现卡拉OK功能。另外,标签无须排序。

现在给你lrc的时间标签请按时间排序输出歌词(歌词可以有空格但不会有[]);

Input

只有一个案例,案例为一个lrc标签文件,用EOF结束,一行一个时间标签,歌词长度不超过100

Output

按时间排序输出歌词,歌词的格式为"[hh:mm.ss]"+歌词

Sample Input

[00:00.00][00:45]hello

[00:10]world

Sample Output

[00:00.00]hello

[00:10.00]world

[00:45.00]hello

解析:利用gets()一直输入,利用 ']' 来确定一个时间段的结束,然后存进结构体,最后while外面排序一下,输出即可。

#include <bits/stdc++.h>
using namespace std;
struct su{
	int h;	//记录分 
	int f;	//记录秒 
	int s;	//记录毫秒 
	char ci[105];	//记录歌词 
	bool operator<(const su&x)const{
		return (h*3600+f*60+s)<(x.h*3600+x.f*60+x.s); 
	}
}arr[10005];
char k[1005],h[105];	//k[]来记录输入的全部,h[]记录歌词 
int main()
{
	int len,biaoji,m,i,cnt,shu,l=0;
	while(gets(k)!=NULL){
		len=strlen(k);
		memset(h,'\0',sizeof(h)); //清空,不然会残留导致WA 
		m=0;
		for(i=len-1;i>=0;i--){	//先反向求出歌词 
			if(k[i]==']'){
				biaoji=i;	//到了歌词左边第一个']',退出 
				break;
			}
			h[m++]=k[i];	//先反向存下来,后面直接反转就是歌词 
		}
		reverse(h,h+m);	//反转,记录歌词 
		shu=0;		//记录数值  
		for(i=0;i<=biaoji;i++){		//biaoji为最末尾的']',终点 
			if(k[i]>='0'&&k[i]<='9') shu=shu*10+k[i]-'0';
			if(k[i]==':') arr[l].h=shu,shu=0,cnt=0;	//遇见':',存入结构体的分 
			if(k[i]=='.') cnt=1,arr[l].f=shu,shu=0;	//cnt改为1,表示出现'.',存入秒 
			if(k[i]==']'&&cnt==1) arr[l].s=shu,shu=0,strcpy(arr[l].ci,h),l++;//如果出现'.',记录毫秒 
			else if(k[i]==']'&&cnt==0) arr[l].f=shu,arr[l].s=0,strcpy(arr[l].ci,h),l++;//如果没有出现'.',那么毫秒就是0 
		}
	}
	sort(arr,arr+l);
	for(i=0;i<l;i++){
		printf("[%02d:%02d.%02d]%s\n",arr[i].h,arr[i].f,arr[i].s,arr[i].ci);
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值