0

私はこの問題を抱えています。すべての単語をすべての組み合わせで大文字に変更できる何らかのプログラムを作成したいと考えています。 .. 何か) アイデアはありますか?

4

2 に答える 2

3

編集:最初のソリューションでは、スペースなどのアルファベット以外の文字が原因で繰り返される順列が正しく管理されていないことに気付きました。この詳細を修正するために、以下のバッチ ファイルを変更しました。

@echo off
setlocal EnableDelayedExpansion

set /P "input=Enter input: "

rem Convert "input" into "upcase" and "lowcase", and create "letters" string
set upcase=%input%
set lowcase=%input%
set letters=
for %%a in ("a=A" "b=B" "c=C" "d=D" "e=E" "f=F" "g=G" "h=H" "i=I" "j=J" "k=K" "l=L" "m=M"
            "n=N" "o=O" "p=P" "q=Q" "r=R" "s=S" "t=T" "u=U" "v=V" "w=W" "x=X" "y=Y" "z=Z") do (
   set upcase=!upcase:%%~a!
   for /F "tokens=1,2 delims==" %%b in (%%a) do (
      set lowcase=!lowcase:%%c=%%b!
      set letters=!letters!%%c
   )
)

rem Separate individual characters in "char" two dimensional array, and create "bit" array
rem Non-alphabetic characters are marked with "bit" elements = 2
set n=-1
:nextChar
   set /A n+=1
   set char=%lowcase:~0,1%
   if "!letters:%char%=!" neq "%letters%" (
      set bit[%n%]=0
      set char[%n%,0]=%char%
      set char[%n%,1]=%upcase:~0,1%
   ) else (
      set bit[%n%]=2
      set char[%n%,2]=%char%
   )
   set upcase=%upcase:~1%
   set lowcase=%lowcase:~1%
if defined lowcase goto nextChar

rem Generate all permutations
:nextValue
   rem Copy characters from "char" array into "output" string with current "bit" values
   set output=
   for /L %%i in (0,1,%n%) do (
      for %%b in (!bit[%%i]!) do (
         set output=!output!!char[%%i,%%b]!
      )
   )
   rem Show this permutation
   echo %output%
   rem Advance "bit" array to next value
   set /A b=n+1, carry=1
   :nextBit
      set /A b-=1
      if !bit[%b%]! lss 2 (
         if !bit[%b%]! equ 0 (
            set /A bit[%b%]=1, carry=0
         ) else (
            set /A bit[%b%]=0, carry=1
         )
      )
   if %b% gtr 0 if %carry% equ 1 goto nextBit
if %carry% equ 0 goto nextValue
于 2013-06-06T22:30:06.723 に答える