返回列表 发帖

回复 34楼 的帖子

for %%i in (#!var:~-1!) do (
    set "var=!%%i! "
    if "!var: %%a =!"=="!var!"
set %%i=!%%i! %%a
  )

这个 for 处理了重复数字。我没有把每个数字设为变量,只用了这些变量:var、#0 至 #9

[ 本帖最后由 tireless 于 2009-4-14 21:04 编辑 ]

TOP

回楼上,事实胜于雄辩,兄弟还是先测试下吧。。。
***共同提高***

TOP

回复 36楼 的帖子

不会显示重复数字啊。

TOP

@echo off
if "%~1"=="b" (
   setlocal enabledelayedexpansion
   for /f "delims=" %%a in (a.txt) do (
      for %%i in (%%a) do (
         set "var=     %%i"
         echo !var:~-1! !var:~-5!
))
exit /b
)
setlocal enabledelayedexpansion
for /f "tokens=1* delims= " %%a in ('%~s0 b^|sort') do set .%%a=!.%%a! %%b
for /l %%a in (0 1 9) do if defined .%%a echo %%a !.%%a!
pauseCOPY
1

评分人数

技术问题请到论坛发帖求助!

TOP

我试试

@echo off
setlocal enabledelayedexpansion
::先排序,再按尾数取
::第一步构建一维数组,并给每个元数武值
for /f "delims=*" %%i in (a.txt) do (
  for %%j in (%%i) do (
      set /a n+=1&set _!n!=%%j
)
)
::用选择法排序
rem echo %n%
for /l %%i in (1,1,%n%) do (
  set /a m=%%i+1
  for /l %%j in (!m!,1,%n%) do (
       if !_%%i! gtr !_%%j! (
            set /a t=_%%i
            set /a _%%i=!_%%j!
            set /a _%%j=t  
)
)
)
::按尾数取
for /l %%i in (1,1,%n%) do (
     for /l %%j in (0,1,9) do (
       if !_%%i:~-1! ==%%j set a_%%j=!a_%%j! !_%%i!
)
)
::输出
for /l %%k in (0,1,9) do (
if !a_%%k! neq 0 echo %%k  !a_%%k!
)
rem set a_
rem set _
pause>nulCOPY
缺点是建一维数组时变量过多,优点是易读易写

TOP

to:随风

随风的贴子测了一下,不能运行,可能和我的win2000系统有关

[ 本帖最后由 tyc 于 2009-4-15 09:33 编辑 ]

TOP

回复 4楼 的帖子

for 比 call 快多了,但是用 for /l 似乎没必要,白浪费了9次循环,直接用 for 不是更好吗?
for %%i in (%%a) do set .%%a=!.%%a! 。。。。
技术问题请到论坛发帖求助!

TOP

自己想的,没有实现排序:
@echo off&setlocal enabledelayedexpansion
for /l %%i in (0 1 9) do (
    for /f "delims=" %%j in (a.txt) do (
        for %%k in (%%j) do (
            set num=%%k
            if "!num:~-1,1!"=="%%i" set _%%i=!_%%i! !num!
)
)
if "!_%%i!" neq "" echo %%i !_%%i!
)
pauseCOPY
(*^_^*)

TOP

回复 40楼 的帖子

38楼用到的外部命令只有一个sort.exe
如果你机器上没有可以到别人机器上拷贝一个过来
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

谢batcher,虽然用sort,或set变量名进行排序很妙,但传统的排序更有意思,比如选择法,插入法,快速法,堆排序等七种,我水平有限,有些排序的写法写不出来!

TOP

回复 44楼 的帖子

对于少量数据的排序,批处理中的set无疑是上上之选。对于大量数据的排序,set可能就不行了,因为一个批处理中是不允许无限制的定义变量的,这时就可以考虑用sort。对于高级语言中的那些传统排序算法,在批处理中往往需要一大段代码(批处理不像高级语言那样可以方便的使用数组、指针等数据结构)来实现,不利于阅读和维护,不到万不得已,还是少用为妙。当然,如果纯粹是挑战自我,玩一玩也未尝不可。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

分类+排序+排版

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (a.txt) do (
      for %%b in (%%a) do (
         set "var=      %%b"
         set/a n=n+1
         set #!var:~-5!#!n!=!var:~-1!
)     )
for /f "tokens=1,3 delims==#" %%a in ('set #') do (set #%%b=!#%%b!%%a)
for /l %%a in (0,1,9) do (if defined #%%a echo %%a!#%%a!)
pauseCOPY

TOP

::分类+排序(比较提取法)

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (a.txt) do (
      for %%b in (%%a) do (
         set "var=%%b"
        for %%c in (!var:~-1!) do (set #%%c=!#%%c! %%b)
)     )
for /l %%a in (0,1,9) do (if defined #%%a (
        set a=!#%%a!&set r=
        set lb=!a:* =!
        set lb=!lb:* =!
        for %%b in (!lb!) do (
                set var=!a:1000=!&set a=&set v=1000
                for %%c in (!var!) do (
                        if !v! leq %%c (set a=%%c !a!) else (set a=!v! !a!&set v=%%c)
                )
                set r=!r! !v!
               
        )
        echo.%%a !r! !a:1000=!
))
pauseCOPY

TOP

嗯...我做出来了(办法很原始)..小水个~我发现我在BATHOME进步了很多啊,我记得我在这里做的第一个新手练习题花了2小时写了N多代码,然后面对大大们的超简洁代码直接扑街了..

TOP

等batman兄发出召唤,我们版主或技术组再贴出代码。但是我好像不是版主,也不是技术组的^_^
(*^_^*)

TOP

返回列表