现在的位置: 首页 > 综合 > 正文

C语言动态链表 取MP3歌词文件内容 带VC6.0完整工程

2014年09月05日 ⁄ 综合 ⁄ 共 2339字 ⁄ 字号 评论关闭
#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完整工程下载百度网盘下载:点我下载

抱歉!评论已关闭.