C语言lrc校验算法详解,C语言解析lrc文件
本程序将歌词文件的时间和歌词分开来,并把 时间转换为微秒的单位。
#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文件相关推荐
- c4.5算法 程序语言,决策树之C4.5算法详解-Go语言中文社区
决策树之C4.5算法详解 主要内容 C4.5算法简介 分裂属性的选择--信息增益率 连续型属性的离散化处理 剪枝--PEP(Pessimistic Error Pruning)剪枝法 缺失属性值的处理 ...
- 详解c语言编程库题,详解C语言编程
C语言作为编程语言,其诞生已经很早,但是在编程语言多样化的今天,C仍然高居TIOBE编程语言排行榜的第一位(2014年5月),而C++语言排位第四.而位居第二位的Java本身就是脱胎于C++语言,第三 ...
- c语言malloc用法 数组,详解C语言用malloc函数申请二维动态数组的实例
详解C语言用malloc函数申请二维动态数组的实例 C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { c ...
- XML格式文件详解及Java解析XML文件内容方法
XML格式文件详解 1.概述 XML,即可扩展标记语言,XML是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,可以说它是一个拥有互联网最高级别通行证的数据携带者. ...
- 归并排序算法详解---C语言实现
其他排序 基数排序 堆排序 插入排序和希尔排序 快速排序 冒泡排序和选择排序 归并排序 前备知识:如果数组中只有一个数,那么这个数组一定是有序的! 核心思想:将两个有序的数组合并为一个有序的数组(运用 ...
- c语言复杂函数转换,详解C语言常用的一些转换工具函数.pdf
详详解解C语语言言常常用用的的一一些些转转换换工工具具函函数数 1..字字符符串串转转十十六六进进制制 代码实现: void StrToHex(char *pbDest, char *pbSrc, i ...
- php 易语言md5加密解密,详解易语言调用js实现md5加密方法
易语言调用js需要用到拓展组件的脚本组件, 在窗口创建完毕的事件里给脚本组件初始化设置下脚本组件的语言属性,在这里以JScript为例: 脚本组件执行脚本的简单方法是: 脚本组件1.执行 () 然 ...
- c语言字 字符串转换成数组_C语言学习教程之详解C语言中的字符串数组
在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include 总结 以上 ...
- C语言学习教程之详解C语言中的字符串数组
在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include <s ...
- c语言long型数据转换,详解C语言的类型转换
1.自动类型转换 •字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128-127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0-255 ...
最新文章
- php mysqli参数,PHP5 mysqli 绑定参数
- 图解JVM垃圾回收算法
- 中间件(1)分布式缓存
- UVA 11557 - Code Theft (KMP + HASH)
- PointNet++详解与代码
- 【Python】Python3编码规范
- php怎样创建csv文件,如何使用PHP创建CSV文件?(代码示例)
- SSM 封装base(二) -封装分页
- html input提交按钮无法使用,无法找到并单击提交按钮使用mshtml.HTMLInputElement
- 控制系统状态空间表达式的解(3)——求解线性定常系统零状态响应
- ET7.0 腾讯云centos部署
- Windows10彻底关闭安全中心
- python中import math用法_import的使用
- __wakeup绕过版本_PHP__wakeup()方法
- 树莓派(Raspberry Pi 4 Model B)编译64位内核Kernel
- 期货反向跟单靠谱吗?
- 成功启动electron-egg项目,electron+vue的傻瓜式搭建
- 美国印钱 为什么不会通货膨胀
- 当前时间显示器(代码屏显)
- Ubuntu20.04安装与配置记录