求教关于字符串的分割,请诸位高手指点一二

2019-07-17 17:30发布

本帖最后由 wind6218 于 2017-5-26 11:37 编辑

我是菜鸟一直对电子类特别感兴趣,从小如此,也喜欢单片机,但是单片机需要C编程,原来自己学了下,很多语言都是开始讲语法,没有软件界面,这对认知深入就造成了障碍,脑子里面没有框架。后来发现labview是个好东西,就类似于能看到电子元器件一样组合,可以有点所见即所得的感觉。目前遇到个难题,串口传过来的数据是是如下格式的:
     1.30448 ; *10** ;  -180.21009 ; *10** ;  31.1<CR><LF>
     1.30447 ; *10** ;  -180.08256 ; *10** ;  31.1<CR><LF>
     1.30447 ; *10** ;  -180.24384 ; *10** ;  31.1<CR><LF>
     1.31030 ; -16.12 ;  -152.53937 ; *10** ;  31.1<CR><LF>
     1.32775 ; -2.90 ;   -94.95797 ;  0.74 ;  30.9<CR><LF>
     1.33360 ;  1.24 ;   -70.64938 ;  2.41 ;  30.8<CR><LF>
     1.33394 ;  1.48 ;   -48.29825 ;  2.91 ;  30.8<CR><LF>
     1.33389 ;  1.44 ;   -40.66545 ;  2.82 ;  30.7<CR><LF>
     1.33343 ;  1.12 ;   -33.26324 ;  2.12 ;  30.6<CR><LF>

*2********* ; *2*** ; *2********* ; *2*** ;  30.5<CR><LF>
数据每三秒发送一次,PC采用串口大师就可以监测到(串口大师监测到的没有<CR><LF>),要把数据分割成5组,
分隔符是“;”,我尝试了两种方案
1.中直接扫描:

2017-05-26_111937.png
但是这样的话,由于数据可能出现*,而星号中间的值是有意义的,代表仪表的错误号,但是扫描函数只能显示为0,所以舍弃了,遂采用以下方式

2017-05-26_112206.png
采用匹配函数,扫描第一个星号,然后用另一个匹配函数扫描第二个,这样能解决,但是整个程序很臃肿,请问有什么好的解决方案吗?

2017-05-26_111946.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。