本程序将歌词文件的时间和歌词分开来,并把 时间转换为微秒的单位。

#include

#include

#include

#include

#define MAXLINE 256

#define MAXBUF 256

char *tmp;

int chartoint(char ch){

return ch - '0';

}

int strtoint(char *str){//计算时间,微秒

if(isdigit(str[0]) && isdigit(str[1])

&& isdigit(str[0]) && isdigit(str[0])

&& isdigit(str[0]) && isdigit(str[0])){

int mintue = chartoint(str[0]) * 10 + chartoint(str[1]);

int second = chartoint(str[3]) * 10 + chartoint(str[4]);

int microsecond = chartoint(str[6]) * 10 + chartoint(str[7]);

return (mintue * 60 + second) * 1000 + microsecond * 10;

}

return -1;

}

char * praseLRC(char *str, int *time){

if(strlen(str) == 0){//空的行

return NULL;

}else{

char *p, *temp;

p = strchr(str, '[');

if(p != NULL)

if(isdigit(*(p + 1))){

temp = p + 1;

p = strchr(str, ']');

temp[p - temp] = '\0';

//printf("%s\n", temp);

if((*time = strtoint(temp)) < 0){

perror("error time");

exit(1);

}

tmp = p + 1;

while(*p != '\n'){

p++;

}

tmp[p - tmp] = '\0';

//printf("%s", lrc);

return tmp;

}

return NULL;

}

return NULL;

}

int main(){

char buf[MAXLINE];

FILE * fd;

int time[MAXBUF];

int line = 0;

char *lrc[MAXBUF];

tmp = (char *)malloc(sizeof(char) * MAXLINE);

if(tmp == NULL){

perror("malloc buf err");

return 1;

}

//fd = fopen("李玖哲 - 爱不需要理由.lrc", "r");

//fd = fopen("龙梅子 - 你把爱情给了谁.lrc", "r");

fd = fopen("王凝露 - 眼泪的错觉.lrc", "r");

if(fd == NULL){

perror("open file");

exit(1);

}

while(fgets(buf, sizeof(buf), fd) != NULL){

if((lrc[line] = praseLRC(buf, &time[line])) != NULL){

printf("%d\t%s\n", time[line], lrc[line]);

line++;

}

}

return 0;

}由于水平限制,目前只能解析图一格式的文件,而图二格式的文件还不能。

运行完本程序,时间和歌词分别存放在两个数组里面。运行结果如下:

C语言lrc校验算法详解,C语言解析lrc文件相关推荐

  1. c4.5算法 程序语言,决策树之C4.5算法详解-Go语言中文社区

    决策树之C4.5算法详解 主要内容 C4.5算法简介 分裂属性的选择--信息增益率 连续型属性的离散化处理 剪枝--PEP(Pessimistic Error Pruning)剪枝法 缺失属性值的处理 ...

  2. 详解c语言编程库题,详解C语言编程

    C语言作为编程语言,其诞生已经很早,但是在编程语言多样化的今天,C仍然高居TIOBE编程语言排行榜的第一位(2014年5月),而C++语言排位第四.而位居第二位的Java本身就是脱胎于C++语言,第三 ...

  3. c语言malloc用法 数组,详解C语言用malloc函数申请二维动态数组的实例

    详解C语言用malloc函数申请二维动态数组的实例 C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { c ...

  4. XML格式文件详解及Java解析XML文件内容方法

    XML格式文件详解 1.概述 XML,即可扩展标记语言,XML是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,可以说它是一个拥有互联网最高级别通行证的数据携带者. ...

  5. 归并排序算法详解---C语言实现

    其他排序 基数排序 堆排序 插入排序和希尔排序 快速排序 冒泡排序和选择排序 归并排序 前备知识:如果数组中只有一个数,那么这个数组一定是有序的! 核心思想:将两个有序的数组合并为一个有序的数组(运用 ...

  6. c语言复杂函数转换,详解C语言常用的一些转换工具函数.pdf

    详详解解C语语言言常常用用的的一一些些转转换换工工具具函函数数 1..字字符符串串转转十十六六进进制制 代码实现: void StrToHex(char *pbDest, char *pbSrc, i ...

  7. php 易语言md5加密解密,详解易语言调用js实现md5加密方法

    易语言调用js需要用到拓展组件的脚本组件, 在窗口创建完毕的事件里给脚本组件初始化设置下脚本组件的语言属性,在这里以JScript为例: 脚本组件执行脚本的简单方法是:  脚本组件1.执行 ()  然 ...

  8. c语言字 字符串转换成数组_C语言学习教程之详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include 总结 以上 ...

  9. C语言学习教程之详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include <s ...

  10. c语言long型数据转换,详解C语言的类型转换

    1.自动类型转换 •字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128-127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0-255 ...

最新文章

  1. php mysqli参数,PHP5 mysqli 绑定参数
  2. 图解JVM垃圾回收算法
  3. 中间件(1)分布式缓存
  4. UVA 11557 - Code Theft (KMP + HASH)
  5. PointNet++详解与代码
  6. 【Python】Python3编码规范
  7. php怎样创建csv文件,如何使用PHP创建CSV文件?(代码示例)
  8. SSM 封装base(二) -封装分页
  9. html input提交按钮无法使用,无法找到并单击提交按钮使用mshtml.HTMLInputElement
  10. 控制系统状态空间表达式的解(3)——求解线性定常系统零状态响应
  11. ET7.0 腾讯云centos部署
  12. Windows10彻底关闭安全中心
  13. python中import math用法_import的使用
  14. __wakeup绕过版本_PHP__wakeup()方法
  15. 树莓派(Raspberry Pi 4 Model B)编译64位内核Kernel
  16. 期货反向跟单靠谱吗?
  17. 成功启动electron-egg项目,electron+vue的傻瓜式搭建
  18. 美国印钱 为什么不会通货膨胀
  19. 当前时间显示器(代码屏显)
  20. Ubuntu20.04安装与配置记录

热门文章

  1. 计算机网络放大器的作用,运算放大器工作原理是什么?
  2. python爬虫qq音乐歌词_10、 在QQ音乐中爬取某首歌曲的歌词
  3. 电脑无法复制粘贴怎么办的解决方法
  4. 强化学习——多智能体强化学习
  5. 让你轻松入门的编程学习窍门,JAVA、Python快速学习资料+练手项目
  6. Java奇数与偶数的判断
  7. Ubuntu 安装字体
  8. 【Unity项目实战】手把手教学:飞翔的小鸟(4)文本添加
  9. 第二十四讲 一阶常微分方程组
  10. FBreader多端同步心得补充