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

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

[复制链接]
发表于 2009-1-15 18:46:28 | 显示全部楼层 |阅读模式
用户输入一串字符后,去除此字符串前所有的0。

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

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

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

[ 本帖最后由 yslyxqysl 于 2009-1-15 20:39 编辑 ]
发表于 2009-1-15 21:39:47 | 显示全部楼层
  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 编辑 ]
发表于 2009-1-15 22:10:11 | 显示全部楼层
  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
复制代码
发表于 2009-1-15 22:22:34 | 显示全部楼层
利用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
复制代码

评分

参与人数 2PB +35 技术 +1 收起 理由
yslyxqysl + 5 完全正确
rat + 30 + 1 原来直接去掉了前面的分隔符啊

查看全部评分

发表于 2009-1-15 22:31:58 | 显示全部楼层
判断是否为纯数字还用一种好用的方法:
将待检测的字符串作为 set /a 运算的变量名,如果是纯数字会出现“运算符不存在”的错误。
set /a %n%=1 2>nul&&echo NaN

评分

参与人数 1PB +8 收起 理由
rat + 8 不过不能排除以数字开头的非纯数字字符串,如 ...

查看全部评分

发表于 2009-1-15 22:54:56 | 显示全部楼层

再来

  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+)/, ""))
复制代码
发表于 2009-1-15 22:56:49 | 显示全部楼层
  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技术 +1 收起 理由
rat + 1 delims=0123456789,好

查看全部评分

发表于 2009-1-16 00:03:56 | 显示全部楼层

未检查是否是纯数字

  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
复制代码
发表于 2009-1-16 09:45:47 | 显示全部楼层

再来

  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")
复制代码

评分

参与人数 1PB +8 收起 理由
zqz0012005 + 8 思路开阔

查看全部评分

发表于 2009-1-16 12:17:30 | 显示全部楼层
  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 编辑 ]

评分

参与人数 1PB +8 收起 理由
rat + 8 无需启用变量延迟

查看全部评分

发表于 2009-1-18 18:33:30 | 显示全部楼层

回复 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
复制代码
发表于 2009-1-18 21:57:53 | 显示全部楼层
新手习题 都给你们占了  ~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 编辑 ]
发表于 2009-1-18 22:38:28 | 显示全部楼层
不是新手的,楼主通通给他们扣分,哈哈。
发表于 2009-1-18 23:05:45 | 显示全部楼层
晕,找了半天不知道从哪里发帖?
发表于 2009-1-19 09:48:47 | 显示全部楼层

答楼主!

我也发一个!

  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



复制代码

评分

参与人数 1PB +5 收起 理由
yslyxqysl + 5 鼓励

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 06:22 , Processed in 0.026442 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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