找回密码
 加入
搜索
查看: 6572|回复: 20

[AU3基础] [已解决]字符替换问题

 火.. [复制链接]
发表于 2012-5-8 21:09:16 | 显示全部楼层 |阅读模式
本帖最后由 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 函数一次只能替换一个字符,所以先得到字符个数,然后循环替换,可是觉得挺没效率的,请问有什么其他方法吗?
发表于 2012-5-8 21:27:53 | 显示全部楼层
咱们凡人也就能想到用StringReplace 函数了,等高手
发表于 2012-5-8 21:40:47 | 显示全部楼层
回复 1# cxm23

看不太懂...字符串是=前面的吗?
你用StringReplace这么替换的?把代码贴上来吧.
发表于 2012-5-8 21:44:34 | 显示全部楼层
回复 3# lixiaolong

我理解是要把比如ACD替换为134

评分

参与人数 1金钱 +10 收起 理由
lixiaolong + 10 明白了,谢谢~

查看全部评分

 楼主| 发表于 2012-5-8 21:46:33 | 显示全部楼层
回复  lixiaolong

我理解是要把比如ACD替换为134
whitehead 发表于 2012-5-8 21:44


是的,可以理解为一个字符串里替换多个子串
发表于 2012-5-8 21:54:04 | 显示全部楼层
老老实实循环替换吧
发表于 2012-5-8 22:02:39 | 显示全部楼层
既然A大说了,那就是没有捷径了
 楼主| 发表于 2012-5-8 22:21:59 | 显示全部楼层
呵, ~ 想不出了,先这样吧,期待StringReplace函数的增强版
发表于 2012-5-8 22:24:17 | 显示全部楼层
循环 很好用

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)

评分

参与人数 2金钱 +30 贡献 +3 收起 理由
cxm23 + 30 代码真简洁,看了好久才明白,本来是想用sw ...
zldfsz + 3

查看全部评分

发表于 2012-5-8 22:24:47 | 显示全部楼层
既然A大都这样说了,那你就认命吧
发表于 2012-5-8 22:25:32 | 显示全部楼层
还是得用循环.


$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[0]
                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

评分

参与人数 2金钱 +20 贡献 +3 收起 理由
cxm23 + 20
zldfsz + 3

查看全部评分

 楼主| 发表于 2012-5-8 22:44:57 | 显示全部楼层
代码真简洁,看了好久才明白,本来是想用switch  case 一个一个替换的,学习了
发表于 2012-5-8 23:02:27 | 显示全部楼层
回复 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)
发表于 2012-5-8 23:12:30 | 显示全部楼层
本帖最后由 netegg 于 2012-5-8 23:17 编辑

[au3]Local $str = "ABCDADCADACAEDDCBABBCE", $ret = ''
while stringlen($str)
$ret &= asc(stringleft($str, 1)) -64
$str = stringtrimleft($str, 1)
wend
MsgBox(0,0,$ret)[/au3]
发表于 2012-5-8 23:15:18 | 显示全部楼层
本帖最后由 afan 于 2012-5-8 23:21 编辑

LZ这种规则的 A=1 B=2 C=3 ... 实际应用并不多吧,用2维数组可能更有实用意义,可以为任意的字符
Local $a2[5][2] = [['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][0], $a2[$i][1])
Next
MsgBox(0, $str, $sTest)
Local $a2[5][2] = [['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][0], $a2[$i][1])
Next
MsgBox(0, $str, $sTest)
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-19 03:29 , Processed in 0.091788 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表