Board logo

标题: [ 新手习题] 批处理去除字符串前所有的0 [打印本页]

作者: yslyxqysl    时间: 2009-1-15 18:46     标题: [ 新手习题] 批处理去除字符串前所有的0

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

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

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

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

[ 本帖最后由 yslyxqysl 于 2009-1-15 20:39 编辑 ]
作者: rat    时间: 2009-1-15 21: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 编辑 ]
作者: rat    时间: 2009-1-15 22:10

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

作者: zqz0012005    时间: 2009-1-15 22:22

利用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
复制代码

作者: zqz0012005    时间: 2009-1-15 22:31

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

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

作者: tireless    时间: 2009-1-15 22:56

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

作者: rat    时间: 2009-1-16 00:03     标题: 未检查是否是纯数字

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

作者: rat    时间: 2009-1-16 09:45     标题: 再来

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

作者: skuny    时间: 2009-1-16 12:17

  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 编辑 ]
作者: rat    时间: 2009-1-18 18:33     标题: 回复 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
复制代码

作者: terse    时间: 2009-1-18 21:57

新手习题 都给你们占了  ~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 编辑 ]
作者: Batcher    时间: 2009-1-18 22:38

不是新手的,楼主通通给他们扣分,哈哈。
作者: cjiabing    时间: 2009-1-18 23:05

晕,找了半天不知道从哪里发帖?
作者: vyuwwen1985    时间: 2009-1-19 09:48     标题: 答楼主!

我也发一个!
  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
复制代码

作者: skuny    时间: 2009-1-19 11:21

感谢rat提出纠正哈!!
作者: Batcher    时间: 2009-1-19 13:34     标题: 回复 14楼 的帖子

右上角有个按钮“新帖”
作者: myzwd    时间: 2009-2-28 17:19     标题: 回复 1楼 的帖子

  1. @echo off
  2. set /p str=
  3. echo. %str%
  4. echo *****************************
  5. if %str:~0,1% neq 0 (echo This is not a numeral ---NaN  & echo bye & goto:eof)
  6. echo orginal str---%str%
  7. :one
  8. if %str:~0,1% equ 0 (set str=%str:~1% )
  9. if %str:~0,1% equ 0 goto one
  10. :end
  11. echo string after delete zero---- %str%
复制代码

[ 本帖最后由 myzwd 于 2009-2-28 17:31 编辑 ]
作者: keen    时间: 2009-3-24 14:15

我来凑一个
  1. @echo off
  2. set /p num=please input number:
  3. :start
  4. set var=%num:~0,1%
  5. if %var% equ 0 (set num=%num:~1% & goto start) else (echo %num% & pause)
复制代码

作者: cainiao736    时间: 2009-3-26 22:09

  1. @echo off
  2. set /p str=请输入字符:
  3. :begin
  4. set a=%str:~0,1%
  5. if  not %a%==0 (goto eof) else ( set %a%==""&&set str=%str:~1%&&goto begin )
  6. :eof
  7. echo %str%
  8. pause
复制代码

[ 本帖最后由 cainiao736 于 2009-3-26 22:33 编辑 ]
作者: flyingsand    时间: 2009-3-28 16:10

  1. @echo off
  2. :input
  3. cls
  4. set /p str=请输入一串字符(纯数字):
  5. echo.%str%|findstr "^[0-9]*$">nul|| (cls& echo 所输入的不是纯数字,请重新输入& pause& goto input)
  6. for /f "delims=0 tokens=1*" %%i in ("10%str%") do set str2=%%j
  7. cls
  8. echo 你输入的字符串为:%str%
  9. echo 去前面所有的零为:%str2%
  10. pause
  11. goto input
复制代码

作者: cheng520    时间: 2011-1-30 10:37

我菜鸟而且,来瞧瞧
作者: we6540    时间: 2011-2-4 21:02

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set /p d=用户输入一串字符:
  4. for %%i in (%d%) do (
  5. set a=%%i
  6. set b=!a:~1,5!
  7. set c=!b:~-4!
  8. echo !c!
  9. )
  10. pause
  11. set a=
  12. set b=
  13. set c=
  14. set d=
复制代码

作者: bbwanwt123    时间: 2011-4-9 17:50

哈哈 各有千秋呀
作者: dosbat    时间: 2011-4-20 13:04

  1. @echo off
  2. set /p n=请输入字符串:
  3. echo %n%|findstr "^[0-9][0-9]*$">nul
  4. if errorlevel 1 echo 不是纯数字&pause&goto :eof else (
  5. :loop
  6. if "%n:~0,1%"=="0" (
  7. set n=%n:~1%
  8. echo %n%
  9. goto loop
  10. ) else goto ex    ::一旦出现第一个不是0的字符则跳出
  11. )
  12. :ex
  13. echo %n%
  14. pause
复制代码

作者: battab    时间: 2014-2-18 22:45

本帖最后由 battab 于 2014-2-18 22:51 编辑

回复 1# yslyxqysl
  1. @echo off
  2. :r
  3. set "input="
  4. set /p input=请输入要入理的数字串:
  5. echo %input%|findstr "^[0-9][0-9]*$">nul||(echo 包含非数字)&&goto r
  6. set str=%input%
  7. :l
  8. if "%str:~0,1%"=="0" (set str=%str:~1%) else (goto end)
  9. goto l
  10. :end
  11. echo %str%
  12. pause>nul
  13. echo 继续请按r,退出请按任意键。
  14. set "enter="
  15. set /p enter=请输入:
  16. if "%enter%"=="r" goto r else exit
复制代码

作者: sbjugt    时间: 2014-3-7 18:04

@echo off
echo 请输入内容
set /p a=

:a
if %a:~0,1% neq 0 goto :b
set a=%a:~1%
goto :a

:b
echo %a%
pause
作者: shelluserwlb    时间: 2014-11-9 17:21

本帖最后由 shelluserwlb 于 2014-11-9 17:24 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :again
  4. set /p n=请输入一段字符(纯数字):
  5. echo %n%|findstr "^[0-9][0-9]*$">nul||goto again
  6. for /l %%i in (0,1,1000) do (
  7.     echo !n:~%%i,1!|findstr "0" >nul||(echo !n:~%%i! & goto :end)
  8. )
  9. :end
  10. pause
复制代码

作者: amwfjhh    时间: 2014-11-11 13:25

rat 发表于 2009-1-15 22:54



   
批处理文件当js文件用,学习了……
作者: ann    时间: 2014-12-13 21:02

也发一个吧,没考虑太多
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p sr=请输入数字:
  3. for /l %%a in (0 1 1000) do (set sw=!sr:~%%a,1!&if not "!sw!"=="0" (call :qc %%a))
  4. :qc
  5. set aa=%1
  6. goto ii
  7. :ii
  8. set sc=!sr:~%aa%!
  9. echo %sc%
  10. goto end
  11. :end
  12. pause>nul&exit
复制代码





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