首页 > 代码库 > sscanf解析固定形态的字符串

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解析固定形态的字符串