c++歌词生成器

c++歌词生成器1 要求 nbsp nbsp nbsp nbsp 有原始歌词文件 xxx lrc 通过编写程序生成新的文件 完整歌词 txt 内容应与正常播放顺序一致 2 代码 include lt stdio h gt include lt stdlib h gt include lt vector gt include lt string h gt include lt string gt

1. 要求:

    有原始歌词文件“xxx.lrc”,通过编写程序生成新的文件“完整歌词.txt”,内容应与正常播放顺序一致。

2. 代码:

#include 
  
    #include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #define MAXLINE 256 using namespace std; typedef struct Number { int time;//歌词时间 int line;//所在行 }; static int LINE = 0;//记录歌词所在的行 int LRCPrase(char *str, vector 
        
          &sentences, vector 
         
           &songTime); int strtoint(char *str); int operator<(Number x, Number y); int main(int argc, char *argv[]) { char buf[MAXLINE]; vector 
          
            sentences, finalSentence; vector 
           
             songTime; FILE *fd1, *fd2; fd1 = fopen("C:\\Users\\Lenovo\\Desktop\\七里香.lrc", "r"); fd2 = fopen("C:\\Users\\Lenovo\\Desktop\\完整歌词.txt", "w"); if (fd1 == NULL) { perror("open file"); exit(1); } //处理歌词 while (fgets(buf, sizeof(buf), fd1) != NULL) { LRCPrase(buf, sentences, songTime); } sort(songTime.begin(), songTime.end()); //按照时间排序 vector 
            
              ::iterator it1 = songTime.begin(); for (; it1 != songTime.end(); it1++) { finalSentence.push_back(sentences[(*it1).line]); } //写入指定的文件中 it1 = songTime.begin(); vector 
             
               ::iterator it = finalSentence.begin(); for (; it1 != songTime.end() && it != finalSentence.end(); it1++, it++) { fputs((*it).c_str(),fd2); } return 0; } int LRCPrase(char *str, vector 
              
                &sentences, vector 
               
                 &songTime) { if (strlen(str) == 1) {//空行 return 0; } else { char *p, *q, *temp = NULL; q = str; //处理时间 while ((p = strchr(q, '[')) != NULL && (temp = strchr(q, ']')) != NULL) { q = p + 1; q[temp - q] = '\0'; struct Number number; if ((number.time = strtoint(q)) < 0) { return 0; } number.line = LINE; songTime.push_back(number); q = temp + 1; } p = ++temp; while (*temp != NULL) { temp++; } p[temp - p] = '\0'; string s(p); sentences.push_back(s); LINE++; return 1; } } //把char转换为int 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; } //重载 
                <操作符,用在sort函数比较中 int="" operator<(number="" x,="" number="" y)="" {="" return="" x.time="" <="" y.time;="" }="" code=""> 
                
               
              
             
            
           
          
         
        
       
      
     
    
  

3. 运行结果:

c++歌词生成器

处理后文件:

c++歌词生成器

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207324.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午2:04
下一篇 2026年3月19日 下午2:04


相关推荐

  • continue和break的区别与用法「建议收藏」

    continue和break的区别与用法「建议收藏」一般而言,程序进入循环后在下一次循环测试之间会执行完循环体的所以语句。continue和break语句可以根据循环体中测试结果来忽略一部分循环内容,甚至结束循环。continue语句三种循环都可以使用continue语句。执行到该语句时,会跳过本次迭代(即循环)的剩余部分,并开始下一轮迭代。如果continue语句在嵌套循环内,则只会影响包含该语句的内层循环。语法C语言中continue语句的语法:continue;流程图实例#inclu……

    2025年9月1日
    8
  • go get 使用代理

    go get 使用代理众所周知的原因,goget命令在提取一些工程或依赖时(如golang.org域名)被墙掉。通过使用vpn或代理的方法可以解决。买VPN这个就不多说了,买vpn,相当于直接连接。使用代理通过shell环境变量exporthttp_proxy=http://ip:portgogetgolang.org/xxx通过设置git代理这也是go官方指导。gitconfig–globalhttp.

    2022年7月25日
    31
  • js 长轮询_websocket挂载到vue上

    js 长轮询_websocket挂载到vue上引入Web端即时通讯技术:即时通讯技术简单的说就是实现这样一种功能:服务器端可以即时地将数据的更新或变化反应到客户端,例如消息即时推送等功能都是通过这种技术实现的。但是在Web中,由于浏览器的限制,实现即时通讯需要借助一些方法。这种限制出现的主要原因是,一般的Web通信都是浏览器先发送请求到服务器,服务器再进行响应完成数据的现实更新。实现Web端即时通讯的方法:实现即时通讯主要有四种方式,它们分别…

    2022年10月14日
    2
  • CentOS7下安装FTP服务

    CentOS7下安装FTP服务

    2021年10月19日
    38
  • layer弹出层的简单使用

    layer弹出层的简单使用一 layer 的 icon 样式以上样式测试代码 layer confirm icon 测试 icon 1 title 提示 function index dosomethinga 确认 layer close index 二 询问框官方案例 询问框 layer co

    2026年2月2日
    2
  • 哈夫曼编码详解——图解真能看了秒懂

    哈夫曼编码详解——图解真能看了秒懂直接上题目 已知字符集 a b c d e f 若各字符出现的次数分别为 6 3 8 2 10 4 则对应字符集中各字符的哈夫曼编码可能是 2 分 A 00 1011 01 1010 11 100B 00 100 110 000 0010 01C 10 1011 11 001D 0011 10 11 0010 01 000

    2026年3月20日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号