找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 65911|回复: 29

批处理输入任意字母,计算它们的总和

[复制链接]
发表于 2008-1-3 22:18:13 | 显示全部楼层 |阅读模式


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



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

[ 本帖最后由 ieutk 于 2008-1-3 22:20 编辑 ]
 楼主| 发表于 2008-1-8 14:30:39 | 显示全部楼层
  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:35 | 显示全部楼层
ieutk
你还有一个大写字母的情况没有写进去哦
发表于 2008-1-8 15:28:26 | 显示全部楼层
方法一、
  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 编辑 ]
发表于 2008-1-8 21:09:58 | 显示全部楼层
小楼的方法好啊!
我开始想的是这样
for %%i in ( a b c d ....z) do (
set /a num+=1
call set %%i=%%num%%
然后利用!字符!(比如!a!就是1了)加就可以了。但是这样除了利用截字符就没有办法了。
小楼的那个跳转和判断太漂亮了。
发表于 2008-1-8 21:39:34 | 显示全部楼层
再来一个,似乎更简洁。。
  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
复制代码
发表于 2008-10-30 21:50:06 | 显示全部楼层
还不懂怎么弄,以后再看。。
发表于 2008-10-31 16:38:23 | 显示全部楼层
学习一下!!!!!!!
发表于 2008-10-31 17:00:51 | 显示全部楼层

补一个:

  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
复制代码
发表于 2009-4-1 11:41:12 | 显示全部楼层
有点复杂:
  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 编辑 ]
发表于 2009-4-1 22:08:37 | 显示全部楼层
  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 这句代码之后会提示“命令语法不正确”,调试了好久都没解决,希望版主帮忙分析下,谢谢了!
发表于 2009-4-1 22:39:15 | 显示全部楼层

回复 11楼 的帖子

你把@echo off删除
自己看看执行过程先
发表于 2009-4-2 18:35:49 | 显示全部楼层
我已经去掉@echo off看过了,只是在set !str:~%%i,1!=%%i 之后多了条“命令语法不正确”,然后接着往下执行,没有再发生错误,结果也是正确的。不知道为什么
发表于 2009-4-2 20:50:15 | 显示全部楼层

回复 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
复制代码
发表于 2009-4-4 02:28:32 | 显示全部楼层
谢谢Batcher的帮助!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 22:05 , Processed in 0.021276 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表