中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 给新人出的一道字符排序题(加分题):
« [1] [2] »
作者:
标题: 给新人出的一道字符排序题(加分题): 上一主题 | 下一主题
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『楼 主』:  给新人出的一道字符排序题(加分题):

有一组字符:13 z 113 -3 778 10004 f k a 119 -101 8 -19 m
要求通过批处理进行排序输出: -101 -19 -3 8 13 113 119 778 10004 a f k m z
请尽量采用不生成临时文件的办法。
PS:第一个做出来的新人,我加15分。
----------------------------------------------------------------------------------------------------------
我的答案:
@echo off&setlocal enabledelayedexpansion
set str=13 z 113 -3 778 10004 f k a 119 -101 8 -19 m
echo 排序前:%str%
for %%i in (%str%) do call,set var=!var! #%%i#
for %%i in (%var%) do set a=%%i&call :lp
echo 排序后:%var:#=%
pause>nul&goto :eof
:lp
for %%i in (%var%) do (
    set b=%%i&set b=!b:#=!&set c=!a:#=!
    if !b! lss !c! (
       set var=!var:%a% =!
       set var=!var:%%i=%%i %a%!
       ) else (
       set var=!var!
    )
)
[ Last edited by zw19750516 on 2008-5-21 at 08:19 PM ]



批处理之家新域名:www.bathome.net
2008-5-21 10:22
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 2 楼』:  

晕,我是出给新人做的!让大家活跃下思维啊。



批处理之家新域名:www.bathome.net
2008-5-21 12:05
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
jia332
初级用户





积分 160
发帖 81
注册 2006-7-27
状态 离线
『第 3 楼』:  

@echo on
set var=13 z 113 -3 778 10004 f k a 119 -101 8 -19 m
for /f %%a in ('%var%') do (
  set /a var1=%%a,var2=%%b, var3=%%c,var4=%%d,var5=%%e,var6=%%f,var7=%%g,var8=%%h, /a var9=%%i,var10=%%j,var11=%%k,var12=%%l,var13=%%m,var14=%%n
)
echo %var11% %var13% %var4% %var12% %var1% %var3% %var10% %var5% %var6% %var9% %var7% %var8% %var14% %var2%
pause

为什么这样取不出值, 请高手指点

[ Last edited by jia332 on 2008-5-21 at 12:53 PM ]

2008-5-21 12:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 4 楼』:  

1 你的代码有误:连续set赋值时之间只能用&格开,如set a=1&set b=2。
2 象这样不如直接:echo -101 -19 -3 8 13 113 119 778 10004 a f k m z



批处理之家新域名:www.bathome.net
2008-5-21 12:55
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
jia332
初级用户





积分 160
发帖 81
注册 2006-7-27
状态 离线
『第 5 楼』:  

set /a a=1+1,b=2+1,c=3+1  
echo %a% %b% %c%
问什么这样就可以,zw19750516能否教小弟一下

2008-5-21 12:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 6 楼』:  

我把前面发的改一下应该就可以



简单!简单!再简单!
2008-5-21 13:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 7 楼』:  

请terse兄留给新人多思考啊



批处理之家新域名:www.bathome.net
2008-5-21 13:11
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
clian76
中级用户





积分 363
发帖 162
注册 2007-4-22
状态 离线
『第 8 楼』:  

太难了..

2008-5-21 13:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by zw19750516 at 2008-5-21 13:11:
请terse兄留给新人多思考啊

所以我没发出来  这两天股票跌S我  没心情了  还是去看一会盘面



简单!简单!再简单!
2008-5-21 13:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zlmjh
新手上路





积分 4
发帖 2
注册 2008-5-20
状态 离线
『第 10 楼』:  

我怎么不会呀

2008-5-21 14:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 11 楼』:  

我只能写成这样了...
@echo off
setlocal enabledelayedexpansion
set i=1
set text="13 z 113 -3 778 10004 f k a 119 -101 8 -19 m"
:loop
for /f "tokens=1,* delims= " %%i in (%text%) do (
        set a%i%=%%i
        set text="%%j"
        set /a i+=1
)
if !text! neq "" goto loop
set /a i-=1
for /l %%a in (1,1,%i%) do (
        for /l %%b in (1,1,%i%) do (
                if !a%%a! lss !a%%b! (
                        set tm=!a%%a!
                        set a%%a=!a%%b!
                        set a%%b=!tm!
                )
        )
)
for /l %%c in (1,1,%i%) do set  /p=!a%%c! <nul
echo.
pause


   此帖被 +3 点积分     点击查看详情   
评分人:【 bat-zw 分数: +3  时间:2008-5-21 15:02


2008-5-21 14:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 12 楼』:  

作的出这个题的,最多只是论坛新人,绝不会是批处理新人。



致精致简!
2008-5-21 14:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 13 楼』:  

同意兄的说法,其实我的最终目的还是让论坛能活跃起来。
ps:jmz573515的代码还可以简化。



批处理之家新域名:www.bathome.net
2008-5-21 15:01
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 14 楼』:  提示:

&&可直接用比较大小的方法,排序时请注意字符的定位和唯一性。



批处理之家新域名:www.bathome.net
2008-5-21 16:04
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 15 楼』:  

我的思路。。。
先提取出数字,并分别赋予变量,set自动排序
然后判断哪些没有被赋予变量,没有被赋予的就是字母,同上,set第二次排序。。
或者新建文件,分别以这些字母命名,然后dir /b o:n 输出命令结果~



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-5-21 17:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: