[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[ 新手习题] 批处理去除字符串前所有的0

用户输入一串字符后,去除此字符串前所有的0。

例如:
014   ----->   14
040   ----->   40
002740   ----->   2740

最优方案:10分;
一般方案:5分;
判断是否为纯数字:3分。

参考:for语句从入门到精通

[ 本帖最后由 yslyxqysl 于 2009-1-15 20:39 编辑 ]

  1. @echo off
  2. :accept
  3. set /p n=Please input a number:
  4. echo.%n%|findstr "^[0-9][0-9]*$">nul||goto accept
  5. :loop
  6. if "%n:~0,1%" neq "" if "%n:~0,1%"=="0" call set n=%%n:~1%%&goto loop
  7. echo.%n%
  8. set "n="
  9. pause
复制代码

[ 本帖最后由 rat 于 2009-1-15 21:59 编辑 ]

TOP

  1. @echo off & setlocal enabledelayedexpansion
  2. :accept
  3. set /p n=Please input a number:
  4. echo.%n%|findstr "^[0-9][0-9]*$">nul||goto accept
  5. set i=0&set "s="&set "f="
  6. :loop
  7. if "!n:~%i%,1!" neq "" set "s=!s! !n:~%i%,1!"&set /a i=i+1&goto loop
  8. for %%a in (%s%) do if not defined f (if %%a neq 0 set r=!r!%%a&set f=1) else set r=!r!%%a
  9. echo.%r%
  10. pause
复制代码

TOP

利用tokens=*
  1. @echo off
  2. :accept
  3. set /p n=Please input a number:
  4. echo.%n%|findstr "^[0-9][0-9]*$">nul||goto accept
  5. for /f "tokens=* delims=0" %%a in ("%n%") do echo %%a
  6. echo.&pause
复制代码
2

评分人数

    • yslyxqysl: 完全正确PB + 5
    • rat: 原来直接去掉了前面的分隔符啊PB + 30 技术 + 1
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

判断是否为纯数字还用一种好用的方法:
将待检测的字符串作为 set /a 运算的变量名,如果是纯数字会出现“运算符不存在”的错误。
set /a %n%=1 2>nul&&echo NaN
1

评分人数

    • rat: 不过不能排除以数字开头的非纯数字字符串,如 ...PB + 8
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

再来

  1. @set @j=1/*&set "@j="&set /p n=Input a number:&call cscript -nologo -e:jscript "%~f0" %%n%%&set "n="&pause&goto:eof */
  2. if(!isNaN(WSH.Arguments(0)))WSH.Echo(WSH.Arguments(0).replace(/^(0+)/, ""))
复制代码

TOP

  1. @echo off
  2. set /p str=请输入:
  3. for /f "tokens=* delims=0 " %%a in ("%str%") do echo %%a
  4. for /f "tokens=* delims=0123456789 " %%a in ("%str%") do (
  5.   if "%%a"=="" (echo 纯数字) else (echo 非纯数字)
  6. )
  7. pause
复制代码
1

评分人数

    • rat: delims=0123456789,好技术 + 1

TOP

未检查是否是纯数字

  1. @set /p n=Plz input:&(call echo e0:200 '%%n%%$'&more /e +1 "%~f0")|debug|findstr /v "^[I\-0P]"&pause>nul&goto:eof
  2. a100
  3. mov ds,ax
  4. cmp byte ptr [200+bx],30
  5. je 113
  6. lea dx,[200+bx]
  7. mov ah,9
  8. int 21
  9. int 20
  10. inc bx
  11. jmp 102
  12. g
  13. q
复制代码

TOP

再来

  1. '&@cls&set /p n=Plz input:&call cscript -nologo -e:vbs "%~f0" %%n%%&pause&goto:eof
  2. WSH.Echo Replace(LTrim(Replace(WSH.Arguments(0), "0", " ")), " ", "0")
复制代码
1

评分人数

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. :111
  3. set "a="
  4. set /p a="请输入:"
  5. echo %a%|findstr "^[0-9][0-9]*$">nul
  6. if %errorlevel%==1 echo %a%不是纯数字&goto 111
  7. :222
  8. if "!a:~0,1!"=="0" set "a=!a:~1!"&goto 222
  9. echo 除0纯数字%a%&goto 111
复制代码

[ 本帖最后由 skuny 于 2009-1-16 12:19 编辑 ]
1

评分人数

    • rat: 无需启用变量延迟PB + 8

TOP

回复 10楼 的帖子

  1. @echo off
  2. :111
  3. set "a="
  4. set /p a="请输入:"
  5. echo %a%|findstr "^[0-9][0-9]*$">nul
  6. if %errorlevel%==1 echo %a%不是纯数字&goto 111
  7. :222
  8. if "%a:~0,1%"=="0" set "a=%a:~1%"&goto 222
  9. echo 除0纯数字%a%&goto 111
复制代码

TOP

新手习题 都给你们占了  ~5
  1. @echo off
  2. :lp
  3. cls&set /p var=输入字符串:
  4. echo %var%|findstr "^[0-9]*$">nul || goto lp
  5. :lp1
  6. if %var:~,1% neq 0 (echo %var%&pause)else set var=%var:*0=%&goto lp1
复制代码

[ 本帖最后由 terse 于 2009-1-18 22:24 编辑 ]

TOP

不是新手的,楼主通通给他们扣分,哈哈。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

晕,找了半天不知道从哪里发帖?

TOP

答楼主!

我也发一个!
  1. @echo off
  2. :kaishi
  3. set /p n=请输入:
  4. echo.%n%|findstr "^[0-9][0-9]*$">nul||goto kaishi
  5. :panduan
  6. if not "%n:~0,1%"=="0"  (echo %n%&pause&goto kaishi) else (goto begin)
  7. :begin
  8. set n=%n:~1%&goto panduan
复制代码
1

评分人数

TOP

返回列表