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
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,'<=biaoji;i++){ //biaoji为最末尾的']',终点
if(k[i]>',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<='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='0'&&k[i]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)