找回密码
 加入
搜索
楼主: pusofalse

[效率算法] 练习001 - 计算字符串长度

 火... [复制链接]
 楼主| 发表于 2009-12-20 11:04:12 | 显示全部楼层
本帖最后由 pusofalse 于 2009-12-20 11:11 编辑

Re 15#:
afan兄的DirInstall_udf.au3中就有“表驱动”的用法啊。
Toplau3函数中用到的一句Assign("_" & $xdDiry, 0)和If IsDeclared("_" & $xdDiry) = 0 Then ... ,其实这就是属于“表驱动”了。
如果不用这两条语句,你原本的思路是怎样的呢?这里的“表”便是变量表了。
发表于 2009-12-20 11:11:49 | 显示全部楼层
回复 16# pusofalse

唉,不太明白执行效率的比对,有时候完全是靠感觉用这种会比较有效率,呵呵,惭愧~~
发表于 2009-12-20 11:34:03 | 显示全部楼层
努力学习中。谢谢各位
发表于 2009-12-20 15:47:39 | 显示全部楼层
Func StringLength($sStr)
        Return (BinaryLen(StringToBinary($sStr,4)) + StringLen($sStr))/2
EndFunc

评分

参与人数 1金钱 +10 收起 理由
pusofalse + 10 学习。

查看全部评分

发表于 2009-12-20 16:46:16 | 显示全部楼层
本帖最后由 pcbar 于 2009-12-20 16:51 编辑

$sString = "abc中文.% 123"
StringRegExpReplace($sString,".","")
Msgbox(0, "长度", @Extended )
或者
$sString = "abc中文.% 123"
$b=StringRegExp($sString,".",3)
Msgbox(0, "长度", UBound($b))

当然,效率不是最高的

评分

参与人数 1金钱 +20 收起 理由
pusofalse + 20 学习了。

查看全部评分

发表于 2009-12-20 22:21:47 | 显示全部楼层
pusofalse 发表于 2009-12-20 09:53


版主这个方法思想确实巧妙,但是对于中文字符获取的字节数不对~一个中文被认为1字节
 楼主| 发表于 2009-12-20 22:39:34 | 显示全部楼层
回复 21# 298311657


    怪我没说清楚,原文中只提到“此处1个全角字符的长度同为1”。其实这里就是只计算字符数,而非字节数了。
发表于 2009-12-21 00:11:49 | 显示全部楼层
1.Binary:
Return BinaryLen($str);对'0x([aA-fF\d]{2})+'格式字符串无效
2.StringRegExp:
StringRegExp($str,"[\s\S]*",1)
Return @Extended-1
发表于 2009-12-21 14:42:54 | 显示全部楼层
看到楼主的高手真多呀!我也要努力学习才行的!
发表于 2009-12-22 13:11:30 | 显示全部楼层
少有新手来发挥,全是一群老鸟,有违LZ初衷啊!
发表于 2009-12-22 14:46:05 | 显示全部楼层
$Str = "测试字符串test"
Msgbox(0, "", "“"&$Str&"”的长度是:"&StringInStr($Str&@crlf, @crlf)-1)

评分

参与人数 1金钱 +50 收起 理由
pusofalse + 50 学习了。

查看全部评分

发表于 2009-12-22 18:42:18 | 显示全部楼层
哇,amu浮出来了
发表于 2009-12-22 19:43:47 | 显示全部楼层
我也乱来一个,刚才看了大家的11楼的感触最深,很好,我从来没有这么思考过,我下面的代码可能不符合版主的要求,不过也没有违规,我乱来的
好处是代码简单,缺点是没有11楼的快
$var="ddfalsfaadfakj我是中国人ldfljsfjf"
$i=1
while 1
        If StringMid($var,1,$i)=$var Then 
                MsgBox(4096,"显示结果","字符长度:"&$i)
                ExitLoop
        EndIf
        $i += 1
WEnd

评分

参与人数 1金钱 +20 收起 理由
pusofalse + 20 学习了。

查看全部评分

发表于 2009-12-23 15:40:34 | 显示全部楼层
本帖最后由 sanmoking 于 2009-12-24 10:15 编辑

貌似我的方法一出来全场震惊,哈哈
看我的:
$a = "使用纯AU3编写,禁止调用其他语言(如VBS、JAVA等)。加分:视思路加分,10-60分不等。"
$txt = $a&"sanmoking"
$ok = StringInStr ($txt,"sanmoking")-1
MsgBox(0,"字符数",$ok)
快给我最高分....哈哈
















回复  sanmoking
    $a = "sanmoking使用纯AU3编写,禁止调用其他语言(如VBS、JAVA等)。加分:视思 ...
afan 发表于 2009-12-23 15:44









哈哈,,
$a = "sanmoking纯AU3编写,禁止调用其他sanmoking1001语言"&@CR&@CRLF&"加分10-60分不等。"
$b = "sanmoking"
While 1
if StringInStr ($a,$b) > 0 Then
$b = $b&Random(0,9,1)
Else
ExitLoop
EndIf
WEnd 
$txt = $a&$b
$ok = StringInStr ($txt,$b)-1
MsgBox(0,"结果",StringLen ($a)&@CRLF&$ok)



刚看见题目上不让用if,那就不用啦,如下:
$a = InputBox("计算输入的字符数量","请随便输入一段文字:","这里随便写点文字。"," M",150,50)
$b = "看这下谁再说我的关键词会有重复,我写个长长长长的关键词,你要是专门一个一个打出来,那我真的佩服你拉,哈哈."
Do
$b = $b&Random(0,9,1)
Until StringInStr ($a,$b) = 0
$txt = $a&$b
$ok = StringInStr ($txt,$b)-1
MsgBox(0,"结果","<"&$a&">"&@CRLF&"-------------------------------"&@CRLF&"StringLen的结果: "&StringLen ($a)&@CRLF&"我的结果: "&$ok)
发表于 2009-12-23 15:44:51 | 显示全部楼层
回复 29# sanmoking


    $a = "sanmoking使用纯AU3编写,禁止调用其他语言(如VBS、JAVA等)。加分:视思路加分,10-60分不等。"

你就完蛋了,呵呵
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-16 08:09 , Processed in 0.078996 second(s), 18 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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