返回列表 发帖

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

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

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

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

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

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

@echo off
:accept
set /p n=Please input a number:
echo.%n%|findstr "^[0-9][0-9]*$">nul||goto accept
:loop
if "%n:~0,1%" neq "" if "%n:~0,1%"=="0" call set n=%%n:~1%%&goto loop
echo.%n%
set "n="
pauseCOPY

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

TOP

@echo off & setlocal enabledelayedexpansion
:accept
set /p n=Please input a number:
echo.%n%|findstr "^[0-9][0-9]*$">nul||goto accept
set i=0&set "s="&set "f="
:loop
if "!n:~%i%,1!" neq "" set "s=!s! !n:~%i%,1!"&set /a i=i+1&goto loop
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
echo.%r%
pauseCOPY

TOP

利用tokens=*
@echo off
:accept
set /p n=Please input a number:
echo.%n%|findstr "^[0-9][0-9]*$">nul||goto accept
for /f "tokens=* delims=0" %%a in ("%n%") do echo %%a
echo.&pauseCOPY
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

再来

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

TOP

@echo off
set /p str=请输入:
for /f "tokens=* delims=0 " %%a in ("%str%") do echo %%a
for /f "tokens=* delims=0123456789 " %%a in ("%str%") do (
  if "%%a"=="" (echo 纯数字) else (echo 非纯数字)
)
pauseCOPY
1

评分人数

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

TOP

未检查是否是纯数字

@set /p n=Plz input:&(call echo e0:200 '%%n%%$'&more /e +1 "%~f0")|debug|findstr /v "^[I\-0P]"&pause>nul&goto:eof
a100
mov ds,ax
cmp byte ptr [200+bx],30
je 113
lea dx,[200+bx]
mov ah,9
int 21
int 20
inc bx
jmp 102
g
qCOPY

TOP

再来

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

评分人数

TOP

@echo off&setlocal enabledelayedexpansion
:111
set "a="
set /p a="请输入:"
echo %a%|findstr "^[0-9][0-9]*$">nul
if %errorlevel%==1 echo %a%不是纯数字&goto 111
:222
if "!a:~0,1!"=="0" set "a=!a:~1!"&goto 222
echo0纯数字%a%&goto 111COPY

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

评分人数

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

TOP

回复 10楼 的帖子

@echo off
:111
set "a="
set /p a="请输入:"
echo %a%|findstr "^[0-9][0-9]*$">nul
if %errorlevel%==1 echo %a%不是纯数字&goto 111
:222
if "%a:~0,1%"=="0" set "a=%a:~1%"&goto 222
echo0纯数字%a%&goto 111COPY

TOP

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

[ 本帖最后由 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

答楼主!

我也发一个!
@echo off
:kaishi
set /p n=请输入:
echo.%n%|findstr "^[0-9][0-9]*$">nul||goto kaishi
:panduan
if not "%n:~0,1%"=="0"  (echo %n%&pause&goto kaishi) else (goto begin)
:begin
set n=%n:~1%&goto panduan
COPY
1

评分人数

TOP

返回列表