1
shyrock 2021-07-19 17:59:40 +08:00 2
如果可以,最好把真实问题贴出来(至少是一部分),你这种抽象和翻译并不能帮助大家理解问题,进而帮助你。
|
2
lrzsw2008 OP @shyrock
谢谢提醒。 我现在需要处理一串文本。 完整格式是“SETTING SN 号码 UID 时间 参数 a 参数 B 参数 C END\” 但是有时候收到的文本会是“SETTING SN 号码 UID 时间 参数 A END\” 又或者是“SETTING SN 号码 UID END\” 又又或者是“SETTING SN 号码 END\” 一开始我觉得可以用 strtok 函数以空格为界逐次拆分文本,并且每次拆分判断拆分下来的内容正确与否(比如 setting 这个协议头字符对不对,SN 号码对不对)和判断是否到了“END\" 但是实际上却发现这样写起来非常吃力,且毫无可维护性。 所以想问 类似的情况是否有其他什么解决方案呢 |
3
wudicgi 2021-07-19 19:29:22 +08:00 1
C 语言的话,简单、清晰的写法就是写个状态机了,用库函数以空格为分隔符依次获取每个部分,并处理
写完大概就是 strtok(), strcmp() 加上若干 while, if 语句吧 要写得更“好看”的话可能就要引入额外的数据结构了,效率会下降,可能还没这个清晰 |
4
wudicgi 2021-07-19 19:32:48 +08:00
哦,对了, strtok() 不太安全, C11 里有 strtok_s(), 但嵌入式的环境大概率没这个函数可用,这个可能得自己看下
strcmp() 有 strncmp() 可用,不一定非得用 strcmp_s() |