51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1710|回复: 5
打印 上一主题 下一主题

[原创] 求高手指教:生成字串的所有可能组合

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-5-3 21:37:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
生成下面字串的所有可能组合:

“E”,”F”,”IJK”, “9”, “87”, “KM”
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2008-5-3 21:38:16 | 只看该作者
请问一下,这段脚本应该怎么写?
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    3#
    发表于 2008-5-4 00:36:16 | 只看该作者
    提示一点:使用 Left、  Length等函数和  + 操作符,再加上一个循环语句,基本就可以实现了。具体只能由你自己去实现了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 2008-5-4 14:43:32 | 只看该作者
    这个。。。"生成字串的所有可能组合"怎么理解。。。有没字符串个数限制?能否出现重复字符串??
    不同的需求写出的代码是完全不同的。。。最简单的一种情况就是固定字符串个数,并允许出现重复~~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2008-5-4 19:59:59 | 只看该作者
    下班回家顺便写了个全排列的函数
    输入参数为一个字符串数组,返回值是该数组所有元素的全排列数组
    例如:
    MyArray=GetAllPermutation(Array("a","b","cd","123","jkl","!@#"))
    那么MyArray(0)值应该是"abcd123jkl!@#"而MyArray(719)值就是[email=!@#jkl123cdba]!@#jkl123cdba[/email]
    程序的逻辑很简单,就是循环去取N位,不过就是易读性很糟糕~~
    一会写个递归的,那个看起来比较清晰。

    1. Function GetAllPermutation(sArr0)
    2. Dim sLen,s,aLen,i,counter
    3. sLen=UBound(sArr0)+1
    4. aLen=Factorial(sLen)
    5. s="Dim cArr("&aLen&")"
    6. Execute s

    7. s="counter=0:"
    8. For i=0 To sLen-2
    9.   s=s&"For i"&i&"=0 To "&sLen-1-i&":sArr"&i+1&"=RemoveFromArray(sArr"&i&",i"&i&"):"
    10. Next
    11. s=s&"cArr(counter)="
    12. For i=0 To sLen-2
    13.   s=s&"sArr"&i&"(i"&i&")&"
    14. Next
    15. s=s&"sArr"&i&"(0):counter=counter+1:"
    16. For i=0 To sLen-2
    17.   s=s&"Next:"
    18. Next

    19. Execute s
    20. GetAllPermutation=cArr
    21. End Function

    22. Function RemoveFromArray(ByVal arr,index)
    23. Dim sTemp,arrTemp
    24. arr(index)=""
    25. sTemp=Join(arr,"|")
    26. If Left(sTemp,1)="|" Then
    27.   sTemp=Right(sTemp,Len(sTemp)-1)
    28. ElseIf Right(sTemp,1)="|" Then
    29.   sTemp=Left(sTemp,Len(sTemp)-1)
    30. Else
    31.   sTemp=Replace(sTemp,"||","|")
    32. End If
    33. arrTemp=Split(sTemp,"|")
    34. RemoveFromArray=arrTemp
    35. End Function

    36. Function Factorial(num)
    37. Dim n,product
    38. product=1
    39. For n=2 To num
    40.   product=product*n
    41. Next
    42. Factorial=product
    43. End Function
    复制代码

    [ 本帖最后由 hsjzfling 于 2008-5-4 21:28 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2008-5-4 21:33:45 | 只看该作者
    这个是使用递归的,也是返回全排列,看起来应该是比之前那个动态生成代码的要清楚多了,用法都一样~

    1. Function GetAllPermutation(ByVal sArr)
    2. sLen=UBound(sArr)+1
    3. aLen=Factorial(sLen)
    4. s="Dim aResult("&aLen&")"
    5. Execute s
    6. Call GetString(sArr,"",aResult,0)
    7. GetFullPermutation=aResult
    8. End Function  

    9. Function GetString(ByVal aTemp,ByVal strTemp,ByRef aResult,ByRef counter)
    10. Dim i,str
    11. If UBound(aTemp)>0 Then
    12.   For i=0 To UBound(aTemp)
    13.    str=strTemp&aTemp(i)
    14.    Call GetString(RemoveFromArray(aTemp,i),str,aResult,counter)
    15.   Next
    16. Else
    17.   aResult(counter)=strTemp&aTemp(0)
    18.   counter=counter+1
    19. End If
    20. End Function

    21. Function RemoveFromArray(ByVal arr,index)
    22. Dim sTemp,arrTemp
    23. arr(index)=""
    24. sTemp=Join(arr,"|")
    25. sTemp=Replace(sTemp,"||","|")
    26. If Left(sTemp,1)="|" Then
    27.   sTemp=Right(sTemp,Len(sTemp)-1)
    28. ElseIf Right(sTemp,1)="|" Then
    29.   sTemp=Left(sTemp,Len(sTemp)-1)  
    30. End If
    31. arrTemp=Split(sTemp,"|")
    32. RemoveFromArray=arrTemp
    33. End Function

    34. Function Factorial(num)
    35. Dim n,product
    36. product=1
    37. For n=2 To num
    38.   product=product*n
    39. Next
    40. Factorial=product
    41. End Function
    复制代码
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-8 07:31 , Processed in 0.083851 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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