最近在做字符串的练习,练了几个就想着把几个小的给组合起来,就有了一个简易明文转换器的想法。大家一起来看看啊,欢迎提建议!! | 代码更新历史: | | 2008.11.16 更新了密码表的产生问题,可以随机生成62个不同字符(0-9,a-z,A-Z)的密码表(感谢pusofalse的建议)!COPY |
感谢pusofalse关于第三段中效率问题的建议,我运行了一下,效率可以提高很多,但是字母输出却全为大写字母,原因为此句 If defined .!var! 中对于.!var!的判断,小写字母和大写字母在此不区分。很好的思路,学习了。还在思考如何能兼顾效率和输出。欢迎大家提建议!再次感谢pusofalse!!COPY
| @echo off | | :begin | | color 0e | | mode con cols=60 lines=26 | | setlocal enabledelayedexpansion | | echo. | | echo ╭────────╮ | | echo ╭───────┤ 简易明文加密器 ├───────╮ | | echo │ ╰────────╯ │ | | echo │ │ | | echo │ 本程序能把指定输入的字符串进行三种运算, │ | | echo │ │ | | echo │ ①进行反序排列 ②对于字母大写换小写,小写换 │ | | echo │ │ | | echo │ 大写 ③按照转换表进行对应加密。暂只支持0-9, │ | | echo │ │ | | echo │ a-z,A-Z的转换。转换表每次随机产生,需要查看 │ | | echo │ │ | | echo │ 的话请直接输入回车。 │ | | echo │ │ | | echo │ 此代码是我在做字符串处理的练习时偶然想 │ | | echo │ │ | | echo │ 到的,肯定还有不足之处,大家一起来讨论! │ | | echo │ │ | | echo │ code by lhjoanna │ | | echo │ │ | | echo ╰────────────────────────╯ | | set code= | | set /a m=0 | | set /a u=0 | | for %%i in (0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z) do ( | | set /a m+=1 | | set x!m!=%%i | | ) | | :loop | | set /a num=!random!%%62+1 | | if not defined _x!num! ( | | call set _x!num!=%%x!num!%% | | call set "code=!code! %%_x!num!%%" | | set /a u+=1 | | ) | | if !u! lss 62 goto loop | | set /a number=0 | | for /l %%i in (1 1 62) do ( | | set /a number+=1 | | set _x!number!= | | ) | | set /p input=请输入: | | if "%input%" equ "" ( | | call :_help | | pause>nul | | goto begin | | ) | | call :_help | | echo 输 入:%input% | | :a | | set str=!str!!input:~-1! | | set input=!input:~0,-1! | | if defined input goto a | | echo 反 序:!str! | | | | set "code_=a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" | | set str=!str: =#! | | :b | | set "str1=!str1!!str:~,1! "&set str=!str:~1! | | if defined str goto b | | for %%i in (!str1!) do ( | | set flag=1 | | for %%j in (!code_!) do ( | | if /i "%%i"=="%%j" if not "%%i"=="%%j" set str=!str!%%j&set flag=0 | | ) | | if !flag! equ 1 set str=!str!%%i | | ) | | set "str=!str:#= !" | | echo 大小写转换:!str! | | | | | | set /a a=0,b=0 | | for %%i in (!code!) do ( | | set /a a+=1 | | set n!a!=%%i | | ) | | set str_str=!str! | | :c | | set /a b=0 | | set _flag=1 | | for %%j in (0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z) do ( | | set /a b+=1 | | call set s=%%n!b!%% | | if "%%j" equ "!str_str:~0,1!" set t=!t!!s!&set _flag=0&goto d | | ) | | :d | | if !_flag! equ 1 set t=!t!!str_str:~,1! | | set "str_str=!str_str:~1!" | | if defined str_str goto c | | echo.&echo 最终结果: !t! | | set str= | | set t= | | set str1= | | pause>nul | | goto begin | | :_help | | cls | | color 0a | | set /a c=0 | | echo.&echo 明暗文密码表 | | echo ──────────────────────── | | set /a a=0,b=0 | | for %%i in (!code!) do ( | | set /a a+=1 | | set n!a!=%%i | | ) | | for %%j in (0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z) do ( | | set /a c+=1 | | call set s=%%n!c!%% | | set /p= %%j--!s!<nul | | set /a num_1=!c!%%5 | | if !num_1! equ 0 echo. | | ) | | echo. | | echo ──────────────────────── | | echo.&echo.COPY |
|