【C语言】把歌词里的播放时间跟歌词提取出来

一,介绍

给到一个字符串,里面包含了时间(唱该歌词的时间以及该歌词)例如“[02:16.33][04:11.44][05:11.44]我想大声宣布对你依依不舍”,如何把两者都给打印出来呢?下面给出解释

二,代码

#include<stdio.h>
void test01()
{
char buf[128] = "[02:16.33][04:11.44][05:11.44]我想大声宣布对你依依不舍";

char *lrc = buf;
while (*lrc == '[')
{
    lrc += 10;
}

char *p_time = buf;
while (*p_time == '[')
{
    int m = 0, s = 0;
    sscanf(p_time, "[%d:%d]", &m, &s);
    // 此处[是为了匹配起始位置, :匹配字符 :用于分隔分钟和秒钟。%d表示要解析一个整数。
    printf("%d 秒打印歌词:%s\n", m * 60 + s, lrc);
    p_time += 10;
}

int main(int argc, char const *argv[])
{
test01();
return 0;
}

三,输出结果

四,详细解析

  1. 首先,在test01()函数中定义了一个字符数组buf,并初始化为包含时间标记和歌词的字符串。

  2. 声明了一个指向字符的指针lrc,并将其指向buf数组的起始位置。

  3. 使用一个while循环来跳过字符串开头的时间标记。循环条件是*lrc == '[',即当前字符是'['

  4. 在循环体内,通过lrc += 10将指针lrc向后移动10个位置,跳过时间标记。

  5. 接下来,声明了另一个指向字符的指针p_time,并将其指向buf数组的起始位置。

  6. 使用一个while循环来遍历字符串中的时间标记。循环条件是*p_time == '[',即当前字符是'['

  7. 在循环体内,声明了两个整型变量ms,并初始化为0。

  8. 使用sscanf()函数从p_time指向的位置解析出分钟和秒钟的值。sscanf()函数根据指定的格式字符串"[%d:%d]"来解析字符串,将解析结果存储到ms变量中。

  9. 使用printf()函数打印出解析得到的时间和对应的歌词。m * 60 + s计算出总共的秒数,lrc指向的是歌词字符串,将其一并打印出来。

  10. 通过p_time += 10将指针p_time向后移动10个位置,跳过时间标记。

  11. main()函数是程序的入口函数,具有两个参数argcargv,但在此代码中没有使用。

  12. main()函数中调用了test01()函数。

  13. 最后,返回0表示程序执行成功并退出。

总体来说,这段代码的功能是解析包含时间标记的歌词字符串,并按照时间顺序打印出对应的歌词。

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值