|
bat-zw
金牌会员
      永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『楼 主』:
给新人出的一道字符排序题(加分题):
使用 LLM 解释/回答一下
有一组字符: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 ]
There is a group of characters: 13 z 113 -3 778 10004 f k a 119 -101 8 -19 m
Requirement: Sort and output through batch processing: -101 -19 -3 8 13 113 119 778 10004 a f k m z
Try to use the method of not generating temporary files as much as possible.
PS: For the first new person who makes it, I will add 15 points.
----------------------------------------------------------------------------------------------------------
My answer:
@echo off&setlocal enabledelayedexpansion
set str=13 z 113 -3 778 10004 f k a 119 -101 8 -19 m
echo Before sorting: %str%
for %%i in (%str%) do call,set var=!var! #%%i#
for %%i in (%var%) do set a=%%i&call :lp
echo After sorting: %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 |
|
|
bat-zw
金牌会员
      永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
|
2008-5-21 12:05 |
|
|
jia332
初级用户
 
积分 160
发帖 81
注册 2006-7-27
状态 离线
|
『第 3 楼』:
使用 LLM 解释/回答一下
@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 ]
@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
Why can't it get the value like this? Please ask experts for guidance.
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 楼』:
使用 LLM 解释/回答一下
1 你的代码有误:连续set赋值时之间只能用&格开,如set a=1&set b=2。
2 象这样不如直接:echo -101 -19 -3 8 13 113 119 778 10004 a f k m z
1. There is an error in your code: When assigning values continuously with set, they should only be separated by &. For example, set a=1&set b=2.
2. It is better to directly do like this: echo -101 -19 -3 8 13 113 119 778 10004 a f k m z
|

批处理之家新域名:www.bathome.net |
|
2008-5-21 12:55 |
|
|
jia332
初级用户
 
积分 160
发帖 81
注册 2006-7-27
状态 离线
|
『第 5 楼』:
使用 LLM 解释/回答一下
set /a a=1+1,b=2+1,c=3+1
echo %a% %b% %c%
问什么这样就可以,zw19750516能否教小弟一下
set /a a=1+1,b=2+1,c=3+1
echo %a% %b% %c%
Why is this okay, can zw19750516 teach the younger brother?
|
|
2008-5-21 12:58 |
|
|
terse
银牌会员
    
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第 6 楼』:
使用 LLM 解释/回答一下
我把前面发的改一下应该就可以
I can modify the previous one and it should be okay
|

简单!简单!再简单! |
|
2008-5-21 13:06 |
|
|
bat-zw
金牌会员
      永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
|
2008-5-21 13:11 |
|
|
clian76
中级用户
  
积分 363
发帖 162
注册 2007-4-22
状态 离线
|
|
2008-5-21 13:17 |
|
|
terse
银牌会员
    
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第 9 楼』:
使用 LLM 解释/回答一下
Originally posted by zw19750516 at 2008-5-21 13:11:
请terse兄留给新人多思考啊
所以我没发出来 这两天股票跌S我 没心情了 还是去看一会盘面
Originally posted by zw19750516 at 2008-5-21 13:11:
Please leave more room for new users to think, Brother Terse.
So I didn't post it. These past two days, the stock market has plummeted, which has really messed me up. I'm not in the mood anymore. I'll just go watch the market for a while.
|

简单!简单!再简单! |
|
2008-5-21 13:32 |
|
|
zlmjh
新手上路

积分 4
发帖 2
注册 2008-5-20
状态 离线
|
|
2008-5-21 14:01 |
|
|
jmz573515
银牌会员
    
积分 1212
发帖 464
注册 2006-12-13
状态 离线
|
『第 11 楼』:
使用 LLM 解释/回答一下
我只能写成这样了...
@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
I can only write it like this...
@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
|
|
2008-5-21 14:41 |
|
|
26933062
银牌会员
    
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第 12 楼』:
使用 LLM 解释/回答一下
作的出这个题的,最多只是论坛新人,绝不会是批处理新人。
Those who can solve this problem are at most new forum members, definitely not batch processing veterans.
|

致精致简! |
|
2008-5-21 14:43 |
|
|
bat-zw
金牌会员
      永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第 13 楼』:
使用 LLM 解释/回答一下
同意兄的说法,其实我的最终目的还是让论坛能活跃起来。
ps:jmz573515的代码还可以简化。
Agree with brother's statement. In fact, my ultimate goal is still to make the forum active.
ps: The code of jmz573515 can still be simplified.
|

批处理之家新域名:www.bathome.net |
|
2008-5-21 15:01 |
|
|
bat-zw
金牌会员
      永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第 14 楼』:
提示:
使用 LLM 解释/回答一下
&&可直接用比较大小的方法,排序时请注意字符的定位和唯一性。
&& can be directly used with the method of comparing sizes. Please pay attention to the positioning and uniqueness of characters when sorting.
|

批处理之家新域名:www.bathome.net |
|
2008-5-21 16:04 |
|
|
pusofalse
银牌会员
    
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第 15 楼』:
使用 LLM 解释/回答一下
我的思路。。。
先提取出数字,并分别赋予变量,set自动排序
然后判断哪些没有被赋予变量,没有被赋予的就是字母,同上,set第二次排序。。
或者新建文件,分别以这些字母命名,然后dir /b o:n 输出命令结果~
My train of thought...
First extract the numbers and assign variables respectively, set for automatic sorting
Then judge which ones are not assigned variables, those not assigned are letters, the same as above, set for the second sorting...
Or create a new file, name them respectively with these letters, and then the dir /b o:n output command result~
|

心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-5-21 17:01 |
|