批处理输入任意字母,计算它们的总和
[size=4][color=red][/color][/size][size=4][color=red][/color][/size]
[size=4][color=red][b] a=1,b=2,c=3 . . . z=26,要计算的任意字母由用户输入,计算它们的总和[/b][/color][/size]
[b][size=4][color=#ff0000][/color][/size][/b]
[b][size=4][color=#ff0000][/color][/size][/b]
[b][size=4][color=#ff0000][/color][/size][/b]
[b][size=4][color=#ff0000] 如用户输入abcd 那么a+b+c+d=10[/color][/size][/b]
[[i] 本帖最后由 ieutk 于 2008-1-3 22:20 编辑 [/i]] [color=white][size=5][code]@echo off&setlocal enabledelayedexpansion
:main
cls&echo.
set input=
set /p input= 请输入字母:
if not defined input goto main
echo %input%|findstr "^[a-z]*$">nul||goto main
call :ya %input% len
for /l %%a in (0 1 %len%) do call :ie %%a _num
echo.
echo 你输入了 "%input%" ,它们的总和为 "%_num%"
echo.
pause
set _num=0
goto main
:ya
for /f "tokens=1 delims=:" %%a in ('^(echo %1^&echo.^)^|findstr /o ".*"') do set /a %2=%%a-4
goto :eof
:: 在随风发的贴子中看到此方法,现学现用,拿来试下
:ie
for %%b in (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 num+=1
if "!input:~%1,1!"=="%%b" set /a %2+=!num!
)
set num=0
goto :eof[/code][/size][/color] ieutk
你还有一个大写字母的情况没有写进去哦 方法一、
[color=white][code]@echo off
:main
cls
set /p input=
echo %input%|findstr "^[a-zA-Z]*$">nul||goto main
echo 你输入的是 %input%
call :ie
echo.&echo 它们的总和是 %str%
echo.&pause&exit
:ie
set num=0
set var=%input:~0,1%
for %%b in (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 num+=1
if /i "%var%"=="%%b" (
set /a str+=num
call set input=%%input:~1%%
call :ie
)
)
goto :eof[/code][/color]
方法二、
[color=white][code]@echo off
:main
cls
set /p input=
echo %input%|findstr "^[a-zA-Z]*$">nul||goto main
echo 你输入的是 %input%
for %%b in (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 num+=1
call set %%b=%%num%%
)
:ie
set /a str+=%input:~0,1%
set input=%input:~1%
if defined input goto ie
echo.&echo 它们的总和是 %str%
echo.&pause&exit[/code][/color]
[[i] 本帖最后由 随风 于 2008-1-8 15:49 编辑 [/i]] 小楼的方法好啊!
我开始想的是这样
for %%i in ( a b c d ....z) do (
set /a num+=1
call set %%i=%%num%%
然后利用!字符!(比如!a!就是1了)加就可以了。但是这样除了利用截字符就没有办法了。
小楼的那个跳转和判断太漂亮了。 再来一个,似乎更简洁。。
[color=white][code]@echo off
:main
cls
set /p input=
echo %input%|findstr "^[a-zA-Z]*$">nul||goto main
echo 你输入的是 %input%
for %%b in (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 num+=1
call set %%b=%%num%%
call set input=%%input:%%b=+%%b%%
)
set /a str=0%input%
echo.&echo 它们的总和是 %str%
echo.&pause&exit[/code][/color] 还不懂怎么弄,以后再看。。 学习一下!!!!!!!
补一个:
[code]@echo off&setlocal enabledelayedexpansionfor %%i in (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 n+=1&set "code=!code! %%i#!n!"
)
set /p str=请输入字母:
:lp
for %%a in (%code%) do (
for /f "tokens=1,2 delims=#" %%i in ("%%a") do (
if /i "%str:~,1%" equ "%%i" set /a num+=%%j
)
)
set "str=%str:~1%"
if defined str goto lp
echo %num%&pause>nul[/code] 有点复杂:[code]@echo off&setlocal enabledelayedexpansion
set str=abcdefghijklmnopqrstuvwxyz
set /p var=please input:
:lp
set v=%var:~0,1%
set /a c+=1
set n=0
:loop
set r=!str:~%n%,1!
set /a n+=1
if /i "%v%"=="%r%" set s%c%=%n% &goto next
goto loop
:next
set var=%var:~1%
if "%var%"=="" goto end
goto lp
:end
for /l %%i in (%c% -1 1) do set /a s+=!s%%i!
echo %s%
pause[/code]
[[i] 本帖最后由 keen 于 2009-4-1 15:49 编辑 [/i]] [code]@echo off&setlocal enabledelayedexpansion
set /p zifu=请输入字母串:
set str= abcdefghijklmnopqrstuvwxyz
for /l %%i in (0,1,26) do (
set !str:~%%i,1!=%%i )
:repeat
set tmp=%zifu:~0,1%
set /a sum+=%tmp%
set zifu=%zifu:~1%
if not "%zifu%"=="" ( goto repeat ) else ( goto eof )
:eof
echo %sum%
pause[/code]代码结果是正确的,但是奇怪的是set !str:~%%i,1!=%%i 这句代码之后会提示“命令语法不正确”,调试了好久都没解决,希望版主帮忙分析下,谢谢了!
回复 11楼 的帖子
你把@echo off删除自己看看执行过程先 我已经去掉@echo off看过了,只是在set !str:~%%i,1!=%%i 之后多了条“命令语法不正确”,然后接着往下执行,没有再发生错误,结果也是正确的。不知道为什么
回复 13楼 的帖子
[code]@echo off&setlocal enabledelayedexpansionset /p zifu=请输入字母串:
set str=#abcdefghijklmnopqrstuvwxyz
for /l %%i in (0,1,26) do (
set !str:~%%i,1!=%%i
)
:repeat
set tmp=%zifu:~0,1%
set /a sum+=%tmp%
set zifu=%zifu:~1%
if not "%zifu%"=="" (
goto :repeat
) else (
goto :end
)
:end
echo.%sum%
pause[/code] 谢谢Batcher的帮助! 利用位运算是否可以简化一下呢?
或者生成VBS。。。 [code]@set/ps=Plz input:&for /f "tokens=2" %%a in ('^(call echo e114 '%%s%%',0^&more /e +1 "%~f0"^)^|debug^|find "AX "') do @set/an=0x%%a&call echo %%n%%&pause>nul&exit/b
a100
MOV BX,0114
CMP BYTE PTR [BX],00
JZ 0112
MOV CL,[BX]
ADD AX,CX
SUB AX,0060
INC BX
JMP 0103
INT 20
g=100 112
rax
q[/code] 只要在if语句加上/i,就可以忽略大小写了!本代码大小写字母值相等的!
[code]@echo off
setlocal enabledelayedexpansion
set "zmb= abcdefghijklmnopqrstuvwxyz"
:main
cls
set/p var=请输入字符串:
echo %var%|findstr "^[a-zA-Z]*$">nul||goto main
set/p=字符串之和为:<NUL
:a
if not "!var:~%n%,1!"=="" (
for /l %%a in (1 1 26) do (
if /i "!var:~%n%,1!"=="!zmb:~%%a,1!" (
set/a sum+=%%a
set/p=!var:~%n%,1!+<NUL
goto :b))
:b
set/a n+=1
goto :a
) else (set/p==!sum!<NUL&echo.)
pause>nul[/code]
[[i] 本帖最后由 sjzong 于 2009-4-22 01:24 编辑 [/i]]
再来一个
[code]@echo off&setlocal enabledelayedexpansionset "zmb= abcdefghijklmnopqrstuvwxyz"
for /l %%a in (1 1 26) do (set/a !!zmb:~%%a,1!!=%%a)
set/p var=请输入字符串:
set/a n=0,sum=0
set str=
:a
if not "!var:~%n%,1!"=="" (
set str=!str!+!var:~%n%,1!
set/a sum=!sum!+!!var:~%n%,1!!
set/a n+=1
goto :a
) else (echo !str:~1!=!sum!)
pause[/code] 还不会,还得继续努力啊,刚才看了2个题目都没看懂,得加劲了 果然...我就知道有狂人要用ASM... @echo off
setlocal ENABLEDELAYEDEXPANSION
set n=0
for %%i in (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 n+=1
set %%i=!n!
)
:sr
cls
echo 请输入你要输入的字母:
set/p xs=
echo !xs!|findstr /i [a-z]||echo 请确认你输入的字母是否正确&&pause>nul&&goto sr
set num=0
:jy
set xsh=!xs:~%num%,1!
if "!xsh!"=="" goto jg
set /a num+=1
echo.&echo !xsh!=!%xsh%!
set /a str=!str!+!%xsh%!
goto jy
:jg
if "!str!"=="" set str=0
echo 你输入的字母计算结果为 !str!
pause>nul
exit
回复 1楼 的帖子
[code]@echo off&setlocal enabledelayedexpansionrem 以下代码给字母赋值
set "str=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 "num=0"
for %%i in (%str%) do (
set/a n+=1
set %%i=!n!)
rem 查找输入的字母并将其对应数字相加
set/p string=请输入字母:
:loop
call,set s=%%string:~!num!,1%%
set/a num+=1
set/a sum=!sum!+!!s!! 2>nul
if not "!s!"=="" goto loop
echo %sum%
pause[/code] [code]@echo off
setlocal enabledelayedexpansion
for %%i in (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 var+=1) &(set %%i=!var!)
set /p inputstr=inputword:
:count
if /i "!inputstr:~%jishu%,1!" neq "" (set /a count+=!inputstr:~%jishu%,1!)&(set /a jishu+=1) else (goto end)
goto count
:end
echo !count!
pause>nul[/code] 实在是有点难度哦,因为我是新手嘛,哈·····
回复 14楼 的帖子
请问为什么set str=#abcdefghijklmnopqrstuvwxyz这句要加个#,还要那个set zifu=%zifu:~1%又是什么意思? [code]@echo off
for %%a in (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 n+=1,%%a=n
set /p input=输入算式:
set /a ans=%input%
echo 结果是:%ans%
pause[/code]我也试试吧,看起来不怎么样 (偶还是新手,一下子给偶这么难的题目,,受不鸟....花了哦1+小时才弄出来...想了老半天,头都快抓破了没在可读性上下功夫....看得我头昏眼花的)
答:[code]@echo off
setlocal EnableDelayedExpansion
set str=abcdefghijklmnopqrstuvwxyz
set /p word=请输入几个小写字母...
set a=0
:xx
call set word1=%%word:~%a%,1%%
set end=%end%%word1%+
if "%word1%"=="" (goto end)
for /l %%i in (0,1,25) do (
set var=%%i
call set str1=%%str:~!var!,1%%
if !str1!==%word1% (call set /a endword=%endword%+!var!+1))
set /a a+=1
goto xx
:end
echo %end:~0,-2%=%endword%
pause[/code]效果:
===================
end;(最后抱怨下楼主...so difficult) [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=1783&ptid=458]6#[/url] [i]随风[/i] [/b]
随风六楼 call set input=%%input:%%b=+%%b%% oh my god,神之替换!!
为了做这个题,我已经想了1个小时,写了20行。看了前辈的答案,决定重新思考,想好了再来写。 [code]@echo off
setlocal enabledelayedexpansion
REM a=1,b=2,c=3 . . . z=26,要计算的任意字母由用户输入,计算它们的总和
REM 如用户输入abcd 那么a+b+c+d=10
set /p inputstr=请输入字符串:
set tempstr=!inputstr!
set letterall=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 letterval=1
for %%i in (%letterall%) do (
call set tempstr=%%tempstr:%%i= !letterval!%%
set /a letterval+=1
)
set sumval=0
for %%i in (!tempstr!) do (
set /a sumval+=%%i
)
echo !inputstr!=!sumval![/code]
页:
[1]