找回密码
 加入
搜索
查看: 3314|回复: 6

[效率算法] 请教一个排序问题。

  [复制链接]
发表于 2010-4-22 02:25:39 | 显示全部楼层 |阅读模式
本帖最后由 itljl 于 2010-4-22 02:27 编辑

$str = "a,b,a,a,b,c"

$strSP = StringSplit($str, ",")

For $I = 1 To $strSP[0]
        MsgBox(0, 0, $strSP[$I])
Next


如何排序显示,
如第一个msgbox显示 a = 3,也就是a出现了3次,
然后是 b = 2 ,也就是b出现了2次。
然后是 c = 1, 也就是C出现了一次。

谢谢。
请注意,字符串中的a,b,c可以是任何字符.不一定是A,B,C
发表于 2010-4-22 02:55:09 | 显示全部楼层
如果字符串中只有半角字符,可以用正则匹配,循环匹配ASCII介于0x20-0x7E之间的字符,或者用Replace函数替换之后查看@extended的值。
如果含有全角字符,可以用表驱动法,用到的函数会有Assign、Eval,效率可能会有问题,因为是循环截取字符串中的每个字符。
发表于 2010-4-22 03:48:00 | 显示全部楼层
楼主是想按字符出现的次数排序吗?
发表于 2010-4-22 09:26:39 | 显示全部楼层
#include <array.au3>
$str = "a,b,a,a,b,c"

$strSP = StringSplit($str, ",")
_ArraySort($strSP, 0,1)
For $I = 1 To $strSP[0]
        MsgBox(0, 0, $strSP[$I])
Next
发表于 2010-4-22 12:35:25 | 显示全部楼层
是这样吗:
#include <array.au3>
$str = "a,d,b,a,d,a,b,d,c,d"
$strSP = StringSplit($str, ",")
_ArraySort($strSP, 0, 1)

Dim $var = "", $n = 0
For $I = 1 To $strSP[0]
        If $var = "" Then $var = $strSP[$I]
        If $strSP[$I] = $var Then
                $n += 1
        Else
                MsgBox(0, "", $var & "=" & $n)
                $n = 1
        endif
    $var = $strSP[$I]
Next
MsgBox(0, 0, $var & "=" & $n)

评分

参与人数 1金钱 +15 收起 理由
afan + 15

查看全部评分

 楼主| 发表于 2010-4-22 21:06:38 | 显示全部楼层
回复 5# shqf


    这位兄弟的接近了,不过有点小问题,就是D出现了4次,却排到最后去了,应该排在第一才对。
发表于 2010-4-22 22:43:48 | 显示全部楼层
#include <array.au3>
Dim $array[1]
$str = "a,d,b,a,d,a,b,d,c,d,d,b,b,a,d,d,c,b,a,c,a,d,e"
$strSP = StringSplit($str, ",")
_ArraySort($strSP, 0, 1)
For $i=1 To $strSP[0]
$str = StringReplace($str, $strSP[$i], "-")
$numreplacements = @extended
If $numreplacements>0 Then
_ArrayAdd($array,$numreplacements&"="&$strsp[$i])
EndIf
Next
_ArraySort($array, 1, 1)
For $n=1 To UBound($array)-1
        MsgBox(0,0,StringRegExpReplace($array[$n],"(\d{0,})=(.+)","$2=$1"))
Next

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-15 18:15 , Processed in 0.091315 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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