新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 计算机科学论坛计算机技术与应用『 C/C++编程思想 』 → 难题一道,谁会啊? 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 9313 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 难题一道,谁会啊? 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     烈火之炎 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:2
      积分:61
      门派:XML.ORG.CN
      注册:2005/11/2

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给烈火之炎发送一个短消息 把烈火之炎加入好友 查看烈火之炎的个人资料 搜索烈火之炎在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看烈火之炎的博客楼主
    发贴心情 难题一道,谁会啊?

    具体问题是:用C语言实现LRC歌词的解析,就是将歌词与时间分开显示。
    [ti:欧若拉]
    [ar:张韶涵]
    [al:欧若拉]
    [by:www.jpwy.net]
    [00:07.96]欧若拉
    [00:14.75]作词:施立
    [00:26.43]作曲:李天龙
    [00:36.55]神秘北极圈
    [00:37.50]阿拉斯加的山巅
    [00:39.10]谁的脸
    [00:40.35]出现海角的天边
    [00:42.30]忽然的瞬间
    [00:43.22]在那遥远的地点
    [00:44.86]我看见
    [00:45.92]恋人幸福的光点
    [01:55.69][00:47.83]灵魂在招唤
    [01:58.42][00:50.64]唱着古老陌生熟悉的歌谣
    [02:01.33][00:53.60]天空在微笑
    [02:03.75][00:56.26]我的世界缤纷闪耀
    [03:14.60][02:06.90][00:59.16]爱是一道光
    [03:16.22][02:08.37][01:00.56]如此美妙
    [03:17.61][02:09.70][01:01.95]指引我们想要的未来
    [03:20.42][02:12.52][01:04.84]魔力北极光
    [03:21.70][02:13.89][01:06.18]奇幻的预言
    [03:23.24][02:15.35][01:07.59]赶快去找不思议的爱
    [03:26.02][02:18.27][01:10.46]爱是一道光
    [03:27.43][02:19.66][01:11.90]如此美妙
    [03:28.85][02:21.07][01:13.30]照亮我们勇气的未来
    [03:31.65][02:23.89][01:16.12]魔力北极光
    [03:33.02][02:25.28][01:17.42]传说的预言
    [03:34.47][02:26.72][01:18.97]原来就是恋人的眼光
    [02:55.61][01:24.56]music
    [01:44.11]沉默一眨眼
    [01:45.41]一万年外的光年
    [01:47.21]我相信
    [01:48.35]未来其实并不远
    [01:50.08]哭泣的眼泪
    [01:51.38]也是喜悦的赞美
    [01:52.84]是因为有你能展翅高飞
    [03:37.36][02:29.43]红橙黄绿蓝
    [03:40.16][02:32.35]五彩的欧若拉
    [03:42.96][02:35.22]爱就在心中
    [03:45.79][02:37.98]相信就会存在
    [03:48.68][02:40.83]红橙黄绿蓝
    [03:51.42][02:43.60]美丽的欧若拉
    [03:54.23][02:46.52]爱就在心中
    [03:57.03][02:49.24]相信就是永远

    (LRC歌词)


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/11/2 16:44:00
     
     烈火之炎 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:2
      积分:61
      门派:XML.ORG.CN
      注册:2005/11/2

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给烈火之炎发送一个短消息 把烈火之炎加入好友 查看烈火之炎的个人资料 搜索烈火之炎在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看烈火之炎的博客2
    发贴心情 
    LRC的基本语法格式比较简单,其格式为“[标识名:值]”,而使用中最重要的就是下面两种标签(tag):

      ①标识标签(ID-tags):

      标识标签主要起注释作用,它又可分为以下几种:

      [ar:艺人名],可以在这里加上歌手信息;
      [ti:曲名],可以在这里加上歌曲信息;
      [al:专辑名],可以在这里加上音乐专辑的信息;
      [by:编者],可以在这里加上指编辑LRC歌词者的信息;

      以上四项在MP3播放时在歌词显示窗口是不显示的;

      [offset:时间补偿值] (其单位是毫秒),此项是用来进行长歌词显示速度补偿所用的。由于一些歌曲版本不同(如翻唱等),有时歌词的显示上可能整体上偏快或偏慢几秒。这时你无须重新编辑歌词,只要按小键盘上的“+"、“-"调整一下当前的显示速度即可。调整后,补偿的时间差信息会被自动添加到歌词中(格式为“[Offset:毫秒数]”)。以后就无须调整了。当LyricsMate自动向歌词内写入时间差补偿标记时,是按照一行一个时间标签的标准格式填写的,原歌词文件中没有标签的行将被忽略。正值表示整体提前,负值相反。

      ②时间标签(Time-tag):

       时间标签的格式通常为“[mm:ss]”(分钟数:秒数)。其中的分钟数和秒数必须是非负整数,比如“[12:34]”是有效的标签,而“[-12:3.4]”则是无效的标签。时间标签可以位于某行歌词中的任意位置。一行歌词可以包含多个时间标签(比如歌词中的迭句部分)。根据这些时间标签,歌词伴侣会按时间的先后顺序依次高亮显示歌词,从而实现卡拉OK功能。另外,时间标签无须排序。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/11/2 16:45:00
     
     烈火之炎 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:2
      积分:61
      门派:XML.ORG.CN
      注册:2005/11/2

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给烈火之炎发送一个短消息 把烈火之炎加入好友 查看烈火之炎的个人资料 搜索烈火之炎在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看烈火之炎的博客3
    发贴心情 
    没高手啊
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/11/3 14:18:00
     
     firstway 帅哥哟,离线,有人找我吗?
      
      
      威望:5
      等级:大三暑假(2个月背完了红宝书)(版主)
      文章:92
      积分:947
      门派:Lilybbs.net
      注册:2005/10/31

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给firstway发送一个短消息 把firstway加入好友 查看firstway的个人资料 搜索firstway在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看firstway的博客4
    发贴心情 
    如果仅仅是把歌词分开
    下面可以做到
    注:ci.txt为前面歌词混和文件

    ------------------------------------
    #include "stdio.h"
    #include<string.h>

    int main()
    {
     FILE* fp;
     char* strp;
     char s[80];
     
     fp=fopen("ci.txt","r");
     if(fp==NULL) return 1;

     while(feof(fp)==0)
     {
      fgets(s,80,fp);
      strp=strrchr(s,']');
      
      if(strp!=NULL) printf("%s\n",strp+1);  
     }
     
     
     fclose(fp);
     return 0;
    }
    -------------------------------
    这里是将歌词打印在屏幕,如果需要写入一个文件也容易改

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/12/2 20:53:00
     
     pennyliang 帅哥哟,离线,有人找我吗?白羊座1979-4-7
      
      
      威望:8
      等级:大二期末(C++考了100分!)
      文章:266
      积分:1911
      门派:Lilybbs.net
      注册:2005/3/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给pennyliang发送一个短消息 把pennyliang加入好友 查看pennyliang的个人资料 搜索pennyliang在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看pennyliang的博客5
    发贴心情 
    char s[80]; 请问80是什么意思?为什么是80而不是85或者90?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/12/3 12:26:00
     
     firstway 帅哥哟,离线,有人找我吗?
      
      
      威望:5
      等级:大三暑假(2个月背完了红宝书)(版主)
      文章:92
      积分:947
      门派:Lilybbs.net
      注册:2005/10/31

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给firstway发送一个短消息 把firstway加入好友 查看firstway的个人资料 搜索firstway在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看firstway的博客6
    发贴心情 
    当然大一点可以啦
    只要每行字符不要大于这个数就可以了
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/12/3 12:41:00
     
     pennyliang 帅哥哟,离线,有人找我吗?白羊座1979-4-7
      
      
      威望:8
      等级:大二期末(C++考了100分!)
      文章:266
      积分:1911
      门派:Lilybbs.net
      注册:2005/3/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给pennyliang发送一个短消息 把pennyliang加入好友 查看pennyliang的个人资料 搜索pennyliang在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看pennyliang的博客7
    发贴心情 
    通常这样写是缺乏原理描述的,可以这样写
    const int maxLineSize = 80;
    char lineBuffer[maxLineSize ];
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/12/3 13:16:00
     
     firstway 帅哥哟,离线,有人找我吗?
      
      
      威望:5
      等级:大三暑假(2个月背完了红宝书)(版主)
      文章:92
      积分:947
      门派:Lilybbs.net
      注册:2005/10/31

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给firstway发送一个短消息 把firstway加入好友 查看firstway的个人资料 搜索firstway在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看firstway的博客8
    发贴心情 
    以下是引用pennyliang在2005-12-3 13:16:00的发言:
    通常这样写是缺乏原理描述的,可以这样写
    const int maxLineSize = 80;
    char lineBuffer[maxLineSize ];




    that‘s good!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/12/3 13:20:00
     
     pennyliang 帅哥哟,离线,有人找我吗?白羊座1979-4-7
      
      
      威望:8
      等级:大二期末(C++考了100分!)
      文章:266
      积分:1911
      门派:Lilybbs.net
      注册:2005/3/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给pennyliang发送一个短消息 把pennyliang加入好友 查看pennyliang的个人资料 搜索pennyliang在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看pennyliang的博客9
    发贴心情 
    另外这段语句也缺乏表达力,必须根据上下文去推测。
    strp=strrchr(s,']');

    可以改写成

    string getSubStingUntileSepcifiedChar(string s, char sepcifiedChar)
    {
         return strrchr(s,sepcifiedChar);
    }

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/12/3 13:21:00
     
     pennyliang 帅哥哟,离线,有人找我吗?白羊座1979-4-7
      
      
      威望:8
      等级:大二期末(C++考了100分!)
      文章:266
      积分:1911
      门派:Lilybbs.net
      注册:2005/3/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给pennyliang发送一个短消息 把pennyliang加入好友 查看pennyliang的个人资料 搜索pennyliang在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看pennyliang的博客10
    发贴心情 
    另外一个问题就是,空行没有明显的规律,有的空3行,有的空2行。
    其他格式上看还是很严谨的,是个不错的程序。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/12/3 13:26:00
     
     GoogleAdSense白羊座1979-4-7
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/22 20:54:13

    本主题贴数11,分页: [1] [2]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms