返回列表 发帖
感谢大家对本贴的关注,其实我出这道题目的根本目的在于充分开放大家的思路,
本来去除指定字符前的0字符最保险的方法就是逐字符判断法,但这种办法的效率
是可想而知的,一旦要处理的字符量巨大的话,将会损耗我们大量的时间,所以要
求大家针对具体问题找出简洁高效的解决方案。所以对于代码是否通用性强其实并
不是我们所要考虑的主要问题,而大家所讨论的焦点无疑放在了代码的通用性上,
我认为这就偏离了我们所要研究的核心(当然并不是说代码的通用性不重要),所
以请后面跟贴的朋友将讨论重心放在思路和技巧上。
***共同提高***

TOP

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (1.txt) do (
    set v=%%i
    if "!v:~0,1!"=="a" (echo !v!) else (
    for /f "tokens=1,2 delims=a" %%j in ("%%i") do (
        set str=%%j
        set str=!str:0=!
        echo !str!a%%k
)))
pauseCOPY
(*^_^*)

TOP

我的思路跟10楼batman的基本一样,可是处理上,还是batman更厉害!
关键是在处理a0000000这行,batman 直接判断以a为分割后第二字段是否为空,就直接解决问题了,佩服!!!
(*^_^*)

TOP

@echo off&setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (1.txt) do (
set str=%%i
set str1=!str:*a=a!
call set tmp=%%str:!str1!=%%
if not "!tmp!"=="" (call set str0=%%tmp:0=%%) else set "str0="
echo !str0!!str1!
)
pauseCOPY


补上。

[ 本帖最后由 inittab 于 2009-4-27 09:11 编辑 ]

TOP

没有if 不用for,只set 搞定,效率高,通用性:无特殊字符的各种情形均可通过。
@echo off
for /f "delims=" %%i in (1.txt) do (
   set "str=%%i"
   setlocal enabledelayedexpansion
   set "a=!str:*a=a!"
   set "b=!a:0=!##
   set str=!str:0=!##
   call echo.%%str:!b!=!a!%%
   endlocal
)
pauseCOPY

[ 本帖最后由 netbenton 于 2009-4-27 19:12 编辑 ]

TOP

for /f "tokens=* delims=0" %%i in (1.txt) do echo %%iCOPY
1

评分人数

TOP

ls看错题了。呵呵
我也看错。现在改正过来了。

TOP

题目出重了。

[ 新手习题] 批处理去除字符串前所有的0
http://www.bathome.net/thread-3086-1-2.html
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 38楼 的帖子

嗯,练功区的那个是重复的吧,晚了差不多半年时间呢。

本帖发表于 2008-8-1 22:37
彼帖发表于 2009-1-15 18:46
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 42楼 的帖子

什么叫“反驳”?大家都是因为爱好批处理才走到一起的,彼此切磋才能更快提高,何来反驳之谈?谁闲着没事去到处反驳?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

我看错了题目,只去掉a前面紧挨着的0,难度大了很多。已经写出来,就贴在这里算了
@echo off&setlocal enabledelayedexpansion
set "var=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"
for /f %%a in (a.txt) do (
    set str=%%a
    for %%b in (%var%) do (
        set "str=!str:%%b= %%b !"
    )
    for %%c in (!str!) do (
        if defined s (
            if !s! neq 0 (<nul set/p=!s!) else (
                if %%c neq a <nul set/p=!s!
             )
        )
        set "s=%%c"
    )
    <nul set/p=!s!&echo/&set "s="
)
pauseCOPY

TOP

@echo off&setlocal enabledelayedexpansion
for /f "tokens=1,* delims=a" %%a in (a.txt) do (
  if "%%b"=="" (set stt=%%a) else (set str=%%a & set stt=%%b)
  set str=!str:0=!
  echo.%str%a!stt!
)
pauseCOPY
好像测试版主给的另外一组数据也可以

没有想到顶了老帖子了,只是发现我的这个代码还是有点意思就发了。

[ 本帖最后由 sgaizxt001 于 2010-6-15 06:08 编辑 ]
努力学习,努力挣分

TOP

@echo off&SetLocal EnableDelayedExpansion
(For /f "tokens=1* delims=a" %%i in (1.txt) do (Set a=%%i
Set b=!a:0=!
echo !b!a%%j ))>2.txt
pauseCOPY
本以为解决了,不过BatMan很坏,留了个陷阱——a0000000。

明天继续想想。

TOP

回复 9# pusofalse

这句怎么解释啊 。call echo   在这里是什么意思啊?
     call,echo.%%var:0=%%a%%str%%

TOP

求加分
sed -e "s/^0*//" 1.txtCOPY

TOP

返回列表