一,介绍
给到一个字符串,里面包含了时间(唱该歌词的时间以及该歌词)例如“[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;
}
三,输出结果
四,详细解析
-
首先,在
test01()
函数中定义了一个字符数组buf
,并初始化为包含时间标记和歌词的字符串。 -
声明了一个指向字符的指针
lrc
,并将其指向buf
数组的起始位置。 -
使用一个
while
循环来跳过字符串开头的时间标记。循环条件是*lrc == '['
,即当前字符是'['
。 -
在循环体内,通过
lrc += 10
将指针lrc
向后移动10个位置,跳过时间标记。 -
接下来,声明了另一个指向字符的指针
p_time
,并将其指向buf
数组的起始位置。 -
使用一个
while
循环来遍历字符串中的时间标记。循环条件是*p_time == '['
,即当前字符是'['
。 -
在循环体内,声明了两个整型变量
m
和s
,并初始化为0。 -
使用
sscanf()
函数从p_time
指向的位置解析出分钟和秒钟的值。sscanf()
函数根据指定的格式字符串"[%d:%d]"
来解析字符串,将解析结果存储到m
和s
变量中。 -
使用
printf()
函数打印出解析得到的时间和对应的歌词。m * 60 + s
计算出总共的秒数,lrc
指向的是歌词字符串,将其一并打印出来。 -
通过
p_time += 10
将指针p_time
向后移动10个位置,跳过时间标记。 -
main()
函数是程序的入口函数,具有两个参数argc
和argv
,但在此代码中没有使用。 -
在
main()
函数中调用了test01()
函数。 -
最后,返回0表示程序执行成功并退出。
总体来说,这段代码的功能是解析包含时间标记的歌词字符串,并按照时间顺序打印出对应的歌词。