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就不说了,编译不通过也不说了,编译后不能正常运行也不说了,就说包里不同目录下,两个同名头文件的差异,也真的是让人无语凝噎了