#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct LrcMessage { char H_Lrc[125];//数组H_lrc为取得的一行歌词信息,包括时间标签 char H_Lrc_N_Time[100];//数组H_lrc为取得的一行歌词信息,不包括时间标签 long Time1;//Time1为时间标签转换后的毫秒数 char Time2[20];//Time2为时间标签,不包括"["和"]"字符 struct LrcMessage *pNext; }Lrc_Message,*P_Lrc_Message; P_Lrc_Message Create_Lrc_List(FILE *fp_lrc_filename) { int n=0; int minute=0,second=0,millisecond=0; char *p_H_Lrc,*p_Time2,*p_H_Lrc_N_Time,*p_AR_Lrc,*p_Ti_Lrc,*p_Al_Lrc; P_Lrc_Message pHead,pNew,pTemp; FILE *p1; pHead=(P_Lrc_Message)malloc(sizeof(Lrc_Message)); p1=fp_lrc_filename; if(NULL==pHead) { printf("申请内存失败,程序将自动退出"); exit(-1); } else { pHead->pNext=NULL; pTemp=(P_Lrc_Message)malloc(sizeof(Lrc_Message)); if(NULL==pTemp) { printf("创建节点失败"); exit(-1); } pHead->pNext=pTemp; fgets(pTemp->H_Lrc,124,p1); p_H_Lrc=pTemp->H_Lrc; p_Time2=pTemp->Time2; p_H_Lrc_N_Time=pTemp->H_Lrc_N_Time; while('\0'!=*p_H_Lrc) { if(*p_H_Lrc!='[')//跳过[ 和]符号的插入 { if(']'==*p_H_Lrc) { n++; *p_Time2='\0';//完成对数组Time2的赋值 } if(n==0) { if(*(p_H_Lrc+2)==':') { minute=(int)(*(p_H_Lrc)-'0')*10+(int)(*(p_H_Lrc+1)-'0'); } if(*(p_H_Lrc+2)=='.') { second=(int)(*(p_H_Lrc)-'0')*10+(int)(*(p_H_Lrc+1)-'0'); } if(*p_H_Lrc=='.') { millisecond=(int)(*(p_H_Lrc+1)-'0')*10+(int)(*(p_H_Lrc+2)-'0'); } *p_Time2=*p_H_Lrc; p_Time2++; } } if(n>0) { *p_H_Lrc_N_Time=*(p_H_Lrc+1); p_H_Lrc_N_Time++; } p_H_Lrc++; } pTemp->Time1=millisecond+minute*60*1000+second*1000; pTemp->pNext=NULL; pNew=(P_Lrc_Message)malloc(sizeof(Lrc_Message)); if(NULL==pNew) { printf("创建节点失败"); exit(-1); } else { pTemp->pNext=pNew; pTemp=pNew;//让pTemp指针始终指向链表的最后节点 pTemp->pNext=NULL; while(0!=fgets(pTemp->H_Lrc,124,p1)) { n=0; p_H_Lrc=pTemp->H_Lrc; p_Time2=pTemp->Time2; p_H_Lrc_N_Time=pTemp->H_Lrc_N_Time; while('\0'!=*p_H_Lrc) { if(*p_H_Lrc!='[')//跳过[ 和]符号的插入 { if(']'==*p_H_Lrc) { n++; *p_Time2='\0';//完成对数组Time2的赋值 } if(n==0) { if(*(p_H_Lrc+2)==':') { minute=(int)(*(p_H_Lrc)-'0')*10+(int)(*(p_H_Lrc+1)-'0'); } if(*(p_H_Lrc+2)=='.') { second=(int)(*(p_H_Lrc)-'0')*10+(int)(*(p_H_Lrc+1)-'0'); } if(*p_H_Lrc=='.') { millisecond=(int)(*(p_H_Lrc+1)-'0')*10+(int)(*(p_H_Lrc+2)-'0'); } *p_Time2=*p_H_Lrc; p_Time2++; } } if(n>0) { *p_H_Lrc_N_Time=*(p_H_Lrc+1); p_H_Lrc_N_Time++; } p_H_Lrc++; } pTemp->Time1=millisecond+minute*60*1000+second*1000; pNew=(P_Lrc_Message)malloc(sizeof(Lrc_Message)); if(NULL==pNew) { printf("创建节点失败"); exit(-1); } pTemp->pNext=pNew; pTemp=pNew;//让pTemp指针始终指向链表的最后节点 } } } pTemp->pNext=NULL; return pHead; }
VC6.0完整工程下载百度网盘下载:点我下载