6fc7ebdb1244a03d1664574e5321d28a.gif

ce7d781e463fb7899af73133c1eb2d24.gif

 分享与快乐同在!

最近有小伙伴询问如何按指定分隔符分割字符串,在karel中并没有按字符分割的内置程序供我们使用,那么我们就来实现这个功能!

在项目中,经常会在字符串中提取数据,比如机器人与相机使用TCP/IP通讯、字符串文本中数据提取等等。如何按字符将一个字符串数据拆分为多个字符串,最终将字符串转换为其他数据类型?

实现代码:

注:在代码中并未将字符串转为real数据类型,那只是调用一下内置函数

PROGRAM str_cut1%STACKSIZE = 4000%INCLUDE ../0_Lib/libTypeVAR   PList:PRMType    --参数存放位置    count,i,prmCount:INTEGER    --字符串分割后存放位置,根据实际需求设定数组、字符串长度。  StrList:ARRAY[30] OF STRING[30]      --字符串剪切分割  ROUTINE str_split(source,split:STRING;strArray:ARRAY OF STRING):INTEGER FROM libRoutine  --获取参数函数  ROUTINE GetPRM(count:INTEGER;valueType:ARRAY OF INTEGER;intValue:ARRAY OF INTEGER;realValue:ARRAY OF REAL;str:ARRAY OF STRING;stateValue:ARRAY OF INTEGER):INTEGER FROM libRoutine    BEGIN  --获取参数  prmCount = GetPRM(PList.count , PList.valueType , PList.intValue , PList.realValue , PList.str , PList.statusValue)        --判断参数1、2 均为字符串  IF((prmCount =2) AND ( PList.valueType[1] = strType  ) AND ( PList.valueType[2] = strType  )  ) THEN      --按参数2字符串,分割参数1字符串,结果存放在 Strlist数组中      count = str_split(PList.str[1],PList.str[2],StrList)    --打印分割后,字符串段数    WRITE(CR,'total:',count,CR)    --遍历打印字符串    FOR i=1 TO count DO       WRITE(' [',StrList[i],'] ')    ENDFOR          ENDIF  --end--END str_cut1

程序中,引用了libroutine文件中的 str_split函数来实现字符串分割。

str_split函数有3个参数:

source:需要被分割的字符串。

split:    分割符号

strArray:分割后的字符串

返回值:字符串被分割后的段数,如果没有分割,也将返回1。

libRoutine 文件中 str_split函数实现代码:

--按字符分割字符串--source:被分割字符串--split:分割符,支持多个字符--strArray:分割后的单个字符串数组ROUTINE str_Split(source,split:STRING;strArray:ARRAY OF STRING):INTEGERVAR   count,i:INTEGER  splitLen:INTEGER  sourceLen:INTEGER    readPos:INTEGER  splitIndex:INTEGER  strTemp:STRING[254]      maxCount:INTEGERBEGIN  count  =0  splitIndex = 0  readPos = 1  splitLen = STR_LEN(split)  sourceLen = STR_LEN(source)      maxCount = ARRAY_LEN(strArray)        IF (splitLen = 0) OR (sourceLen = 0) THEN    RETURN (0)  ENDIF    FOR i = 1 TO maxCount DO            --复制源字符串    strTemp =    SUB_STR(source,readPos,sourceLen)            --查找分隔符位置    splitIndex = INDEX(strTemp,split)                      count=count+1    IF splitIndex > 0 THEN            readPos =  readPos + splitIndex+splitLen-1              --剪切字符串      strArray[count] = SUB_STR(strTemp,1,splitIndex-1)          else              strArray[count] = strTemp            RETURN (count)    ENDIF        --判断越界    IF readPos > sourceLen THEN      RETURN (count)    ENDIF          ENDFOR    RETURN (count)  END str_Split

OK!今天的分享到此结束,记得分享哦!

f20e43e35db7150fdd4d671f4be77100.gif

8e70866d7d46170a7c6fa7f0033ca5dd.png

673b4173ea3f3ec2de8f64d51050e913.png

84d86af43a6309571af5a893b5bf2d18.png

6961386bed4d5395a36ecc3cf7a163b0.png

1a1d4d1e385d68cc6ea011d648ee8d73.png

a763b3947fd191c3aab50bf0d3deaf66.png

NO.97

 Robot Tips

2020

2226e567f021da7db0afd5d12e7fcc00.gif 
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐