sscanf解析固定形态的字符串

Posted 黑车司机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sscanf解析固定形态的字符串相关的知识,希望对你有一定的参考价值。

某厂商demo中的解析字符串的一段代码,字符串格式是“2016/10/02 14:55:26~14:55:28”

        HB_SDVR_TIME bgntime,endtime;
        bgntime.dwYear    = atoi(g_Filename);
        bgntime.dwMonth    = atoi(g_Filename + 5);
        bgntime.dwDay    = atoi(g_Filename + 8);
        bgntime.dwHour    = atoi(g_Filename + 11);
        bgntime.dwMinute  = atoi(g_Filename + 14);
        bgntime.dwSecond  = atoi(g_Filename + 17);
        endtime.dwYear = atoi(g_Filename);
        endtime.dwMonth = atoi(g_Filename + 5);
        endtime.dwDay = atoi(g_Filename + 8);
        endtime.dwHour = atoi(g_Filename + 23);
        endtime.dwMinute = atoi(g_Filename + 26);
        endtime.dwSecond = atoi(g_Filename + 29);

这一直数到29,还是很佩服的

其实这种固定格式可以使用sscanf中匹配正则的方法来弄,比较简单明了。

 

几个规则:

基本格式为%[set],例如%[a-z],%[0-9]等,只匹配序列中的字符

^号用于非,即匹配序列外中的字符,遇到序列中的字符停止匹配

*号用于跳过某数据,后面也可以加匹配类型,%*[0-9]

sscanf最后返回匹配成功的数量

 

顺便再吐下槽,从一些公开的东西是可以看到一家公司的用心程度的,譬如该厂商网站上的demo,子工程名字好些个都是preview就不说了,编译不通过也不说了,编译后不能正常运行也不说了,就说包里不同目录下,两个同名头文件的差异,也真的是让人无语凝噎了

 

以上是关于sscanf解析固定形态的字符串的主要内容,如果未能解决你的问题,请参考以下文章

sscanf神器使用

sscanf 与 sscanf_s

sscanf使用小记

sscanf()分割字符数组

如何捕获 sscanf'd 字符串的长度?

sscanf高级用法级正则表达式