标题: [求助]如何对文本中的每个字符加1?
[打印本页]
作者: pusofalse
时间: 2008-5-18 15:43
标题: [求助]如何对文本中的每个字符加1?
a.txt
peh9a7cygxm91
3c2gjm05ba3gz
epkvkojd92023
字母也要加1
输出后为:
qfi0b8dzhyn02
4d3hkn16cb4ha
fqlwlpke03134
当前数字加1。。。 当前字母向后移一位
根据zw19750516 前辈以前的帖子想出的一个问题,想了2天没想出来,请教各位达人!
付a.txt生成代码:
@echo off
set str=0123456789abcdefghijklmnopqrstuvwxyz
:1
set/a n=%random%%%36
call set var=%%str:~%n%,1%%
set str1=%str1%%var%
set/a m+=1
if %m% lss 13 goto 1
echo %str1%>>a.txt
set m=
set str1=
set /a y+=1
if %y% lss 3 goto 1
pause
作者: 26933062
时间: 2008-5-18 16:36
@echo off&setlocal enabledelayedexpansion
set "num=abcdefghijklmnopqrstuvwxyza"
for /l %%l in (0 1 25) do (
set /a max=%%l+1
call set "var=%%num:~!max!,1%%"
set "_!num:~%%l,1!=!var!"
set "_%%l=!max!"
)
for /f "delims=" %%a in (a.txt) do (
set "str=%%a"
call echo !str:~0,-1!%%_!str:~-1!%%
)
pause
作者: pusofalse
时间: 2008-5-18 16:40
Quote: |
Originally posted by 26933062 at 2008-5-18 04:36 PM:
[code]
@echo off&setlocal enabledelayedexpansion
set "num=abcdefghijklmnopqrstuvwxyza"
for /l %%l in (0 1 25) do (
set /a max=%%l+1
call set "var=%%num:~!max!,1%%" ... |
|
遗憾。。。。代码有误。。。只能对每行最后的字符加1
作者: 26933062
时间: 2008-5-18 16:43
你不是要求最后一个字符加一吗?
作者: 26933062
时间: 2008-5-18 16:47
开始看错题了。
:
@echo off&setlocal enabledelayedexpansion
set "num=abcdefghijklmnopqrstuvwxyza"
for /l %%l in (0 1 25) do (
set /a max=%%l+1
call set "var=%%num:~!max!,1%%"
set "_!num:~%%l,1!=!var!"
set "_%%l=!max!"
)
for /f "delims=" %%a in (a.txt) do (
set "str=%%a"
call :loop
echo.
)
pause
:loop
set /p= !_%str:~0,1%!<nul
set str=!str:~1!
if defined str goto loop
goto :eof
作者: pusofalse
时间: 2008-5-18 17:08
Quote: |
Originally posted by 26933062 at 2008-5-18 04:47 PM:
开始看错题了。
:[code]
@echo off&setlocal enabledelayedexpansion
set "num=abcdefghijklmnopqrstuvwxyza"
for /l %%l in (0 1 25) do (
set /a max=%%l+1
call set "v ... |
|
看着有点头晕。。。 赞佩!
作者: HAT
时间: 2008-5-18 17:50
楼主是想用这个方法进行替换加密吗?
作者: pusofalse
时间: 2008-5-18 19:00
Quote: |
Originally posted by HAT at 2008-5-18 05:50 PM:
楼主是想用这个方法进行替换加密吗? |
|
没这样想过。。。做这题只是练习一下而已。。。
但用这种方法加密的确不失为一种加密方法,密码学上也有这种加密方式 ^_^
作者: bat-zw
时间: 2008-5-19 12:35
标题: 我也来一个:
@echo off&setlocal enabledelayedexpansion
set code=abcdefghijklmnopqrstuvwxyz0123456789&set n=1
:begin
set _%n%=%code:~,1%&set code=%code:~1%
set /a n+=1
if defined code goto begin
for /f "delims=" %%i in (a.txt) do set n=1&set var=&set str=%%i&call :lp
pause>nul&goto :eof
:lp
set a=%str:~,1%&set str=%str:~1%
if %a% equ z set _%b%=a&goto echo
if %a% equ 9 set _%b%=0&goto echo
for /l %%i in (1,1,36) do if "!_%%i!"=="%a%" set b=%%i&set /a b+=1&goto echo
set /a n+=1
:echo
set var=%var%!_%b%!
if defined str goto lp
echo %var%
作者: bat-zw
时间: 2008-5-19 12:42
Quote: |
Originally posted by 26933062 at 2008-5-18 16:47:
开始看错题了。
:[code]
@echo off&setlocal enabledelayedexpansion
set "num=abcdefghijklmnopqrstuvwxyza"
for /l %%l in (0 1 25) do (
set /a max=%%l+1
call set "v ... |
|
测试结果不正确,少了10的判断。
作者: moniuming
时间: 2008-5-19 13:13
测试文本a.txt
code name
12 ali
13 sam
14 jim
5楼的运行结果
Quote: |
F:\test\test3>test
dpefobnf
23bmj
24tbn
25kjn
请按任意键继续. . . |
|
9楼的运行结果:
Quote: |
F:\test\test3>test1
此时不应有 z。 |
|
作者: 26933062
时间: 2008-5-19 14:09
Quote: |
Originally posted by zw19750516 at 2008-5-19 12:42:
测试结果不正确,少了10的判断。 |
|
没注意,
再第一个for结束后,加一句 set _9=0 就可以了。
作者: bat-zw
时间: 2008-5-19 15:33
Quote: |
Originally posted by moniuming at 2008-5-19 13:13:
测试文本a.txt
code name
12 ali
13 sam
14 jim 5楼的运行结果
9楼的运行结果:
|
|
开始没考虑空格,修改如下:
@echo off&setlocal enabledelayedexpansion
set code=abcdefghijklmnopqrstuvwxyz0123456789&set n=1
:begin
set _%n%=%code:~,1%&set code=%code:~1%
set /a n+=1
if defined code goto begin
for /f "delims=" %%i in (a.txt) do set n=1&set var=&set str=%%i&call :lp
pause>nul&goto :eof
:lp
set a=%str:~,1%&set str=%str:~1%
if "%a%"=="z" set _%b%=a&goto echo
if "%a%"=="9" set _%b%=0&goto echo
if "%a%"==" " set _%b%= &goto echo
for /l %%i in (1,1,36) do if "!_%%i!"=="%a%" set b=%%i&set /a b+=1&goto echo
:echo
set var=%var%!_%b%!
if defined str goto lp
echo %var%
ps:如文本中有特殊字符,则批处理根本做不到这一点了(对所有字符+1)。
[
Last edited by zw19750516 on 2008-5-19 at 03:39 PM ]
作者: 26933062
时间: 2008-5-19 17:30
标题: 回 13 楼
13 楼代码测试有漏掉字符的现象,不知是否我测试有误。
@echo off&setlocal enabledelayedexpansion
set "num=abcdefghijklmnopqrstuvwxyza"
for /l %%l in (0 1 25) do (
set /a max=%%l+1
call set "var=%%num:~!max!,1%%"
set "_!num:~%%l,1!=!var!"
set "_%%l=!max!"
)
set _9=0
for /f "delims=" %%a in (a.txt) do set "str=%%a"&call :loop
pause
:loop
if "%str:~0,1%"==" " (set /p= <nul) else set /p= !_%str:~0,1%!<nul
set "str=!str:~1!"
if defined str goto loop
echo.&goto :eof
作者: bat-zw
时间: 2008-5-19 20:34
Quote: |
Originally posted by 26933062 at 2008-5-19 17:30:
13 楼代码测试有漏掉字符的现象,不知是否我测试有误。 |
|
确实是的,感谢指正,修改如下:
@echo off&setlocal enabledelayedexpansion
set code=abcdefghijklmnopqrstuvwxyz0123456789
:begin
set /a n+=1
set _%n%=%code:~,1%&set code=%code:~1%
if defined code goto begin
for /f "delims=" %%i in (a.txt) do set str=%%i&call :lp
pause>nul&goto :eof
:lp
set a=%str:~,1%&set str=%str:~1%&set n=0
if "%a%"=="z" set a=a&goto echo
if "%a%"=="9" set a=0&goto echo
if "%a%"==" " set a= &goto echo
for /l %%i in (1,1,36) do (
set /a n+=1
if "!_%%i!"=="%a%" set /a n+=1&goto echo
)
:echo
if %n% gtr 1 set a=!_%n%!
set var=%var%%a%
if defined str goto lp
echo %var%&set var=
作者: terse
时间: 2008-5-19 20:56
来晚了 我也发个
@echo off&setlocal enabledelayedexpansion
set var=abcdefghijklmnopqrstuvwxyz01234567890
for /l %%i in (0 1 35) do call:lp %%i
set z=a
for /f "delims=" %%i in (a.txt) do set str=%%i&set str2=&call:lp1
pause&exit
:lp1
set str1=!str:~,1!
if "!str1!"==" " set "str2=!str2! "
set str2=!str2!!%str1%!&set str=!str:~1!
if not defined str echo !str2!&goto :eof
goto lp1
:lp
set/a n=%1+1
set !var:~%1,1!=!var:~%n%,1!