Board logo

标题: 批处理输入任意字母,计算它们的总和 [打印本页]

作者: ieutk    时间: 2008-1-3 22:18     标题: 批处理输入任意字母,计算它们的总和



     a=1,b=2,c=3 . . . z=26,要计算的任意字母由用户输入,计算它们的总和



    如用户输入abcd             那么a+b+c+d=10

[ 本帖最后由 ieutk 于 2008-1-3 22:20 编辑 ]
作者: ieutk    时间: 2008-1-8 14:30

  1. @echo off&setlocal enabledelayedexpansion
  2. :main
  3. cls&echo.
  4. set input=
  5. set /p input=  请输入字母:
  6. if not defined input goto main
  7. echo %input%|findstr "^[a-z]*$">nul||goto main
  8. call :ya %input% len
  9. for /l %%a in (0 1 %len%) do call :ie %%a _num
  10. echo.
  11. echo   你输入了 "%input%" ,它们的总和为 "%_num%"
  12. echo.
  13. pause
  14. set _num=0
  15. goto main
  16. :ya
  17. for /f "tokens=1 delims=:" %%a in ('^(echo %1^&echo.^)^|findstr /o ".*"') do set /a %2=%%a-4
  18. goto :eof
  19. :: 在随风发的贴子中看到此方法,现学现用,拿来试下
  20. :ie
  21. 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 (
  22. set /a num+=1
  23. if "!input:~%1,1!"=="%%b" set /a %2+=!num!
  24.     )
  25. set num=0
  26. goto :eof
复制代码

作者: 辉少    时间: 2008-1-8 15:18

ieutk
你还有一个大写字母的情况没有写进去哦
作者: 随风    时间: 2008-1-8 15:28

方法一、
  1. @echo off
  2. :main
  3. cls
  4. set /p input=
  5. echo %input%|findstr "^[a-zA-Z]*$">nul||goto main
  6. echo 你输入的是 %input%
  7. call :ie
  8. echo.&echo 它们的总和是 %str%
  9. echo.&pause&exit
  10. :ie
  11. set num=0
  12. set var=%input:~0,1%
  13. 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 (
  14.         set /a num+=1
  15.         if /i "%var%"=="%%b" (
  16.                   set /a str+=num
  17.                   call set input=%%input:~1%%
  18.                   call :ie
  19.         )
  20. )
  21. goto :eof
复制代码

方法二、
  1. @echo off
  2. :main
  3. cls
  4. set /p input=
  5. echo %input%|findstr "^[a-zA-Z]*$">nul||goto main
  6. echo 你输入的是 %input%
  7. 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 (
  8.   set /a num+=1
  9.   call set %%b=%%num%%
  10. )
  11. :ie
  12. set /a str+=%input:~0,1%
  13. set input=%input:~1%
  14. if defined input goto ie
  15. echo.&echo 它们的总和是 %str%
  16. echo.&pause&exit
复制代码


[ 本帖最后由 随风 于 2008-1-8 15:49 编辑 ]
作者: novaa    时间: 2008-1-8 21:09

小楼的方法好啊!
我开始想的是这样
for %%i in ( a b c d ....z) do (
set /a num+=1
call set %%i=%%num%%
然后利用!字符!(比如!a!就是1了)加就可以了。但是这样除了利用截字符就没有办法了。
小楼的那个跳转和判断太漂亮了。
作者: 随风    时间: 2008-1-8 21:39

再来一个,似乎更简洁。。
  1. @echo off
  2. :main
  3. cls
  4. set /p input=
  5. echo %input%|findstr "^[a-zA-Z]*$">nul||goto main
  6. echo 你输入的是 %input%
  7. 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 (
  8.   set /a num+=1
  9.   call set %%b=%%num%%
  10.   call set input=%%input:%%b=+%%b%%
  11. )
  12. set /a str=0%input%
  13. echo.&echo 它们的总和是 %str%
  14. echo.&pause&exit
复制代码

作者: xwfswh    时间: 2008-10-30 21:50

还不懂怎么弄,以后再看。。
作者: loveruixue    时间: 2008-10-31 16:38

学习一下!!!!!!!
作者: batman    时间: 2008-10-31 17:00     标题: 补一个:

  1. @echo off&setlocal enabledelayedexpansion
  2. 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 (
  3.     set /a n+=1&set "code=!code! %%i#!n!"
  4. )
  5. set /p str=请输入字母:
  6. :lp
  7. for %%a in (%code%) do (
  8.     for /f "tokens=1,2 delims=#" %%i in ("%%a") do (
  9.         if /i "%str:~,1%" equ "%%i" set /a num+=%%j
  10.     )
  11. )
  12. set "str=%str:~1%"
  13. if defined str goto lp
  14. echo %num%&pause>nul
复制代码

作者: keen    时间: 2009-4-1 11:41

有点复杂:
  1. @echo off&setlocal enabledelayedexpansion
  2. set str=abcdefghijklmnopqrstuvwxyz
  3. set /p var=please input:
  4. :lp
  5. set v=%var:~0,1%
  6. set /a c+=1
  7. set n=0
  8. :loop
  9. set r=!str:~%n%,1!
  10. set /a n+=1
  11. if /i "%v%"=="%r%" set s%c%=%n% &goto next
  12. goto loop
  13. :next
  14. set var=%var:~1%
  15. if "%var%"=="" goto end
  16. goto lp
  17. :end
  18. for /l %%i in (%c% -1 1) do set /a s+=!s%%i!
  19. echo %s%
  20. pause
复制代码

[ 本帖最后由 keen 于 2009-4-1 15:49 编辑 ]
作者: cainiao736    时间: 2009-4-1 22:08

  1. @echo off&setlocal enabledelayedexpansion
  2. set /p zifu=请输入字母串:
  3. set str= abcdefghijklmnopqrstuvwxyz
  4. for /l %%i in (0,1,26) do (
  5. set !str:~%%i,1!=%%i )
  6. :repeat
  7. set tmp=%zifu:~0,1%
  8. set /a sum+=%tmp%
  9. set zifu=%zifu:~1%
  10. if not "%zifu%"=="" ( goto repeat ) else ( goto eof )
  11. :eof
  12. echo %sum%
  13. pause
复制代码
代码结果是正确的,但是奇怪的是set !str:~%%i,1!=%%i 这句代码之后会提示“命令语法不正确”,调试了好久都没解决,希望版主帮忙分析下,谢谢了!
作者: Batcher    时间: 2009-4-1 22:39     标题: 回复 11楼 的帖子

你把@echo off删除
自己看看执行过程先
作者: cainiao736    时间: 2009-4-2 18:35

我已经去掉@echo off看过了,只是在set !str:~%%i,1!=%%i 之后多了条“命令语法不正确”,然后接着往下执行,没有再发生错误,结果也是正确的。不知道为什么
作者: Batcher    时间: 2009-4-2 20:50     标题: 回复 13楼 的帖子

  1. @echo off&setlocal enabledelayedexpansion
  2. set /p zifu=请输入字母串:
  3. set str=#abcdefghijklmnopqrstuvwxyz
  4. for /l %%i in (0,1,26) do (
  5.   set !str:~%%i,1!=%%i
  6. )
  7. :repeat
  8. set tmp=%zifu:~0,1%
  9. set /a sum+=%tmp%
  10. set zifu=%zifu:~1%
  11. if not "%zifu%"=="" (
  12.   goto :repeat
  13. ) else (
  14.   goto :end
  15. )
  16. :end
  17. echo.%sum%
  18. pause
复制代码

作者: cainiao736    时间: 2009-4-4 02:28

谢谢Batcher的帮助!
作者: defanive    时间: 2009-4-4 03:35

利用位运算是否可以简化一下呢?

或者生成VBS。。。
作者: rat    时间: 2009-4-10 01:11

  1. @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
  2. a100
  3. MOV     BX,0114
  4. CMP     BYTE PTR [BX],00
  5. JZ      0112
  6. MOV     CL,[BX]
  7. ADD     AX,CX
  8. SUB     AX,0060
  9. INC     BX
  10. JMP     0103
  11. INT     20
  12. g=100 112
  13. rax
  14. q
复制代码

作者: sjzong    时间: 2009-4-22 01:19

只要在if语句加上/i,就可以忽略大小写了!本代码大小写字母值相等的!
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "zmb= abcdefghijklmnopqrstuvwxyz"
  4. :main
  5. cls
  6. set/p var=请输入字符串:
  7. echo %var%|findstr "^[a-zA-Z]*$">nul||goto main
  8. set/p=字符串之和为:<NUL
  9. :a
  10. if not "!var:~%n%,1!"=="" (
  11. for /l %%a in (1 1 26) do (
  12. if /i "!var:~%n%,1!"=="!zmb:~%%a,1!" (
  13. set/a sum+=%%a
  14. set/p=!var:~%n%,1!+<NUL
  15. goto :b))
  16. :b
  17. set/a n+=1
  18. goto :a
  19. ) else (set/p==!sum!<NUL&echo.)
  20. pause>nul
复制代码

[ 本帖最后由 sjzong 于 2009-4-22 01:24 编辑 ]
作者: sjzong    时间: 2009-4-25 01:47     标题: 再来一个

  1. @echo off&setlocal enabledelayedexpansion
  2. set "zmb= abcdefghijklmnopqrstuvwxyz"
  3. for /l %%a in (1 1 26) do (set/a !!zmb:~%%a,1!!=%%a)
  4. set/p var=请输入字符串:
  5. set/a n=0,sum=0
  6. set str=
  7. :a
  8. if not "!var:~%n%,1!"=="" (
  9. set str=!str!+!var:~%n%,1!
  10. set/a sum=!sum!+!!var:~%n%,1!!
  11. set/a n+=1
  12. goto :a
  13. ) else (echo !str:~1!=!sum!)
  14. pause
复制代码

作者: aiguozhe    时间: 2010-1-30 17:48

还不会,还得继续努力啊,刚才看了2个题目都没看懂,得加劲了
作者: Seter    时间: 2010-1-31 20:59

果然...我就知道有狂人要用ASM...
作者: zdsg2001    时间: 2010-2-1 17:58

@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
作者: pumahxh    时间: 2010-3-24 13:11     标题: 回复 1楼 的帖子

  1. @echo off&setlocal enabledelayedexpansion
  2. rem 以下代码给字母赋值
  3. 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"
  4. set "num=0"
  5. for %%i in (%str%) do (
  6.     set/a n+=1
  7.     set %%i=!n!)
  8. rem 查找输入的字母并将其对应数字相加
  9. set/p string=请输入字母:
  10. :loop
  11. call,set s=%%string:~!num!,1%%
  12. set/a num+=1
  13. set/a sum=!sum!+!!s!! 2>nul
  14. if not "!s!"=="" goto loop
  15. echo %sum%
  16. pause
复制代码

作者: honeybat    时间: 2010-4-15 16:22

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. 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!)
  4. set /p inputstr=inputword:
  5. :count
  6. if /i "!inputstr:~%jishu%,1!" neq "" (set /a count+=!inputstr:~%jishu%,1!)&(set /a jishu+=1) else (goto end)
  7. goto count
  8. :end
  9. echo !count!
  10. pause>nul
复制代码

作者: 634175535    时间: 2010-4-24 17:19

实在是有点难度哦,因为我是新手嘛,哈·····
作者: qq105699129    时间: 2010-6-27 17:12     标题: 回复 14楼 的帖子

请问为什么set str=#abcdefghijklmnopqrstuvwxyz这句要加个#,还要那个set zifu=%zifu:~1%
又是什么意思?
作者: defanive    时间: 2010-6-27 17:42

  1. @echo off
  2. 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
  3. set /p input=输入算式:
  4. set /a ans=%input%
  5. echo 结果是:%ans%
  6. pause
复制代码
我也试试吧,看起来不怎么样
作者: poxi    时间: 2010-7-18 21:50

(偶还是新手,一下子给偶这么难的题目,,受不鸟....花了哦1+小时才弄出来...想了老半天,头都快抓破了没在可读性上下功夫....看得我头昏眼花的)

答:
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set str=abcdefghijklmnopqrstuvwxyz
  4. set /p word=请输入几个小写字母...
  5. set a=0
  6. :xx
  7. call set word1=%%word:~%a%,1%%
  8. set end=%end%%word1%+
  9. if "%word1%"=="" (goto end)
  10. for /l %%i in (0,1,25) do (
  11. set var=%%i
  12. call set str1=%%str:~!var!,1%%
  13. if !str1!==%word1% (call set /a endword=%endword%+!var!+1))
  14. set /a a+=1
  15. goto xx
  16. :end
  17. echo %end:~0,-2%=%endword%
  18. pause
复制代码
效果:

===================
end;(最后抱怨下楼主...so difficult)
作者: taofan712    时间: 2017-3-1 23:38

回复 6# 随风
随风六楼 call set input=%%input:%%b=+%%b%% oh my god,神之替换!!
为了做这个题,我已经想了1个小时,写了20行。看了前辈的答案,决定重新思考,想好了再来写。
作者: 懒虫阿布    时间: 2018-7-26 21:27

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. REM a=1,b=2,c=3 . . . z=26,要计算的任意字母由用户输入,计算它们的总和
  4. REM   如用户输入abcd             那么a+b+c+d=10
  5. set /p inputstr=请输入字符串:
  6. set tempstr=!inputstr!
  7. 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
  8. set letterval=1
  9. for %%i in (%letterall%) do (
  10. call set tempstr=%%tempstr:%%i= !letterval!%%
  11. set /a letterval+=1
  12. )
  13. set sumval=0
  14. for %%i in (!tempstr!) do (
  15. set /a sumval+=%%i
  16. )
  17. echo !inputstr!=!sumval!
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2