[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[已解决]批处理怎样对字符串进行可重复组合?

对给定个数字符进行可重复组合
例:set zf=abcdefghijklmnopqrstuvwxyz
如果输入5(不固定) 则从zf 中取5个进行组合:
有:aaaaa;aaaab,aaaac,……zzzzz。
但如aaaac,acaaa,aacaa,caaaa……
     abcde,cdabc,dacbe……

均属重复只要任意一个即可。
说明:1.遍历比较实现应该很简单,但效率太低。希望有高效的方法。
          2.这题如一般排列组合有差别
         3.如果字符不好处理,set zf=0123456789亦可(这个是原题要求,也是我要的),这里要求字符是为了通用性。
--------------------------------------------
感谢powerbat 提供的思路
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. set arr=0123456789
  4. ::len为arr的长度
  5. set len=10
  6. set /p num=需要组合的字数:
  7. set /a num-=1,len-=1
  8. for /l %%a in (0 1 %num%) do (
  9.     if 0==%%a (set start=0) else (set /a start=%%a-1&set start=%%!start!)
  10.     set "do=!do! for /l %%%%a in (!start!,1,%len%) do"
  11.     set "exp=!exp!^!arr:~%%%%a,1^!"
  12. )
  13. %do% echo %exp%
  14. pause
  15. endlocal
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 yangfengoo 于 2011-5-1 11:57 编辑

2# batman

这不是在集思广益吗?难道一定要遍历才行?这个问题本来就和一般的组合不同,如果全部遍历一遍有太多重复的数据

TOP

6# powerbat


思路不错,不过arr的长度被固定了

TOP

8# batman


很明显上面的排列不符合我的要求,和我的问题不同。你是否理解了我的要求?

TOP

返回列表