[已解决]字符替换问题
本帖最后由 cxm23 于 2012-5-8 22:47 编辑规定A=1,B=2,C=3,D=4,E=5,字符串可能为A或AB或ACD或BDE等组合,想要把字符串替换为相应的1,12,134,245,请问要怎么实现比较高效。
只想到一种方法:因为StringReplace 函数一次只能替换一个字符,所以先得到字符个数,然后循环替换,可是觉得挺没效率的,请问有什么其他方法吗? 咱们凡人也就能想到用StringReplace 函数了,等高手 回复 1# cxm23
看不太懂...字符串是=前面的吗?
你用StringReplace这么替换的?把代码贴上来吧. 回复 3# lixiaolong
我理解是要把比如ACD替换为134 回复lixiaolong
我理解是要把比如ACD替换为134
whitehead 发表于 2012-5-8 21:44 http://www.autoitx.com/images/common/back.gif
是的,可以理解为一个字符串里替换多个子串 老老实实循环替换吧 既然A大说了,那就是没有捷径了 呵, ~ 想不出了,先这样吧,期待StringReplace函数的增强版 循环 很好用
Local $str = "ABCDADCADACAEDDCBABBCE"
Local $newstr = ""
Local $array = StringToASCIIArray($str)
Local $i
For $i = 0 To UBound($array)-1
If $array[$i]>=Asc("A") And $array[$i]<=Asc("E") Then
$array[$i] += Asc("1") - Asc('A')
EndIf
Next
$newstr = StringFromASCIIArray($array)
MsgBox(0, "", $str & @CRLF & $newstr)
既然A大都这样说了,那你就认命吧{:face (303):} 还是得用循环.
$str = 'A'
MsgBox(0, $str, str($str))
$str = 'AB'
MsgBox(0, $str, str($str))
$str = 'ACD'
MsgBox(0, $str, str($str))
$str = 'BDE'
MsgBox(0, $str, str($str))
$str = 'BDEAC'
MsgBox(0, $str, str($str))
$str = 'BDEACPFGHIUUYFUGIUGOUHIUGIYGUGFGOU'
MsgBox(0, $str, str($str))
Func str($string)
Local $Replace, $l
$l = StringSplit(StringUpper($string), "", 0)
For $b = 1 To $l
For $s = 65 To 90
If Chr($s) == $l[$b] Then
;~ $Replace &= $s - 64
$Replace &= $s - 64 & ','
EndIf
Next
Next
;~ Return $Replace
Return StringTrimRight($Replace, 1)
EndFunc ;==>str
代码真简洁,看了好久才明白,本来是想用switchcase 一个一个替换的,学习了{:face (239):} 回复 1# cxm23
Local $str = "ABCDADCADACAEDDCBABBCE"
$str = StringRegExpReplace($str, "A", '1')
$str = StringRegExpReplace($str, "B", '2')
$str = StringRegExpReplace($str, "C", '3')
$str = StringRegExpReplace($str, "D", '4')
$str = StringRegExpReplace($str, "E", '5')
MsgBox(4096, "测试", $str)
本帖最后由 netegg 于 2012-5-8 23:17 编辑
Local $str = "ABCDADCADACAEDDCBABBCE", $ret = ''
while stringlen($str)
$ret &= asc(stringleft($str, 1)) -64
$str = stringtrimleft($str, 1)
wend
MsgBox(0,0,$ret) 本帖最后由 afan 于 2012-5-8 23:21 编辑
LZ这种规则的 A=1 B=2 C=3 ... 实际应用并不多吧,用2维数组可能更有实用意义,可以为任意的字符Local $a2 = [['A', 1],['B', 2],['C', 3],['D', 4],['E', 5]]
Local $str = 'BDEACE', $sTest = $str
For $i = 0 To UBound($a2) - 1
$sTest = StringReplace($sTest, $a2[$i], $a2[$i])
Next
MsgBox(0, $str, $sTest)Local $a2 = [['A', 1],['b', '二'],['C', 33],['D', 'Si'],['E0', @CRLF]]
Local $str = 'BDE0ACE', $sTest = $str
For $i = 0 To UBound($a2) - 1
$sTest = StringReplace($sTest, $a2[$i], $a2[$i])
Next
MsgBox(0, $str, $sTest)
页:
[1]
2