C语言解析多格式的lrc文件
作者:网络转载 发布时间:[ 2014/4/10 9:48:56 ] 推荐标签:C语言 lrc文件
昨天写了一个程序,只能解析简单的lrc文件,我有修改了一些源程序,现在可以解析很多格式的lrc文件,并弄好歌词的顺序
/**
* create by: w397090770
* Email:wyphao.2007@163.com
* create data: 2012.3.27
**/
#include <stdio.h> //for printf,fgets...
#include <stdlib.h> //for exit
#include <vector> //for vector
#include <string.h> //for strlen
#include <string> //for string
#include <algorithm> //for sort
#define MAXLINE 256
using namespace std;
typedef struct Number{
int time;//歌词时间
int line;//所在行
};
static int LINE = 0;//记录歌词所在的行
int LRCPrase(char *str, vector<string> &sentences, vector<Number> &songTime);
int strtoint(char *str);
int operator<(Number x,Number y);
int main(int argc, char *argv[]){
char buf[MAXLINE];
vector<string> sentences, finalSentence;
vector<Number> songTime;
FILE *fd;
//fd = fopen("李慧珍 - 爱死了昨天.lrc", "r");
//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){
LRCPrase(buf, sentences, songTime);
}
sort(songTime.begin(), songTime.end());//按照时间排序
//printf("%d
", sentences.size());
/*vector<string>::iterator it = sentences.begin();
for(; it != sentences.end(); it++){
//printf("%d ,%d ", (*it).time, (*it).line);
printf("%s", (*it).c_str());
}*/
//按时间顺序排序歌词
vector<Number>::iterator it1 = songTime.begin();
for(; it1 != songTime.end(); it1++){
//printf("%d ,%d
", (*it1).time, (*it1).line);
finalSentence.push_back(sentences[(*it1).line]);
}
it1 = songTime.begin();
vector<string>::iterator it = finalSentence.begin();
for(; it1 != songTime.end() && it != finalSentence.end(); it1++, it++){
printf("%d ,%d %s", (*it1).time, (*it1).line, (*it).c_str());
}
return 0;
}
int LRCPrase(char *str, vector<string> &sentences, vector<Number> &songTime){
if(strlen(str) == 1){//空行
return 0;
}else{
char *p, *q, *temp;
q = str;
//处理时间的
while((p = strchr(q, ""["")) != NULL && (temp = strchr(q, ""]"")) != NULL){
q = p + 1;
q[temp - q] = ""