感谢这么多高手,非常完美!
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
@echo off&setlocal enabledelayedexpansion
set/p str=请输入字符:
:lp
if defined str (
set num=!str:~,1!
if not defined ..!num! (
set /a n+=1
set ..!num!=b
set "_!n!=!str:~,1!"&set "str=!str:~1!"
goto lp
) else (
set "str=!str:~1!"
goto lp
))
call:next
echo %mn% 个组合
pause&exit
:next
set/a m+=1
if %m% leq %n% for /l %%i in (1 1 %n%) do (
for %%j in (%~1) do set .%%j=%%j
if not defined .%%i call :next "%~1 %%i"
for /l %%k in (1 1 %n%) do set .%%k=
) else (
for /l %%l in (1 1 %n%) do set .%%l=
for %%m in (%~1) do set/p=!_%%m!<nul
echo.
set/a mn+=1
)
set/a m-=1
@echo off&setlocal enabledelayedexpansion
set/p str=请输入字符:
:lp
set num=!str:~,1!
if not defined .!num! (
set str1=!str1!!num!
set /a n+=1
set .!num!=b
set "_!n!=!str:~,1!"&set "str=!str:~1!"
if defined str goto lp
)else (
set "str=!str:~1!"
if defined str goto lp
)
set/a n-=1
>b.bat echo @echo off^&setlocal enabledelayedexpansion
>>b.bat echo set "str=%str1%"
>>b.bat echo for /l %%%%i in (0 1 %n%) do set _%%%%i=^^!str:~%%%%i,1^^!^&set var0=^^!var0^^! %%%%i
for /l %%i in (0 1 %n%) do (
set/a m+=1
if !m! gtr %n% (
>>b.bat echo for %%%%%%i in (^^!var%%i^^!^) do echo !var!^^!_%%%%%%i^^!)else (
>>b.bat echo for %%%%%%i in (^^!var%%i^^!^) do ^(set "var!m!=^!var%%i:%%%%%%i=^!"
set "var=!var!^!_%%%%%%i^!"
set "k=!k!^)"
))
>>b.bat echo set/a t+=1
>>b.bat echo %k%
>>b.bat echo echo %%t%% 个组合
call "b.bat"
del "b.bat"
pause>nul
Originally posted by clian76 at 2008-12-23 13:49:
测试了一下楼上的代码,还是没达到想要的要求。楼上的代码只是告诉共有多少种组合。但并没有排除已存在的重复组合。
我的办法是在生成了一个 ...
@echo off&setlocal enabledelayedexpansion
call :func "0" "" "abcdef"
pause &exit
:func
set str=%~3
if "%str:~1%"=="" (set /a na=%~1+1
echo,%~2%str%
goto :eof)
set na=0
:loop
set /a nb=na+1
call :func "%na%" "%~2!str:~%na%,1!" "!str:~0,%na%!!str:~%nb%!"
set str=%~3
if not "!str:~%na%!"=="" goto :loop
set /a na=%~1+1