Board logo

标题: [求助]如何对文本中的每个字符加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!