中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 对称输出加分题(具有挑战性)
« [1] [2] [3] [4] [5] »
作者:
标题: 对称输出加分题(具有挑战性) 上一主题 | 下一主题
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 61 楼』:  



  Quote:
Originally posted by zw19750516 at 2008-7-14 10:39 AM:
效率问题出在这里:echo %input%|findstr [%string:~-1%%string:~0,1%]>nul||set str=#%str:~1,-1%%#
在批处理中要尽量用if做判断,少用findstr。

如前所述, 这是为了兼容性. 我最得意的就是这句了. 而且实际上这里只存在2个字母的判断, 你的CODE再长, 也依旧是2个字母.

高效率和简洁应该建立在准确的前提上吧?

比较了38楼的代码, 运行速度快我很多, 我承认, 因为几乎在瞬间给出答案. 但正如作者所言无法处理重复字母.

我的57楼代码需要等待一下. 想改进但囿于水平问题, 无法再提高了.
另外, 谁能告诉我57楼第二段代码错在哪里? 谢谢了


[ Last edited by quya on 2008-7-14 at 11:20 AM ]



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-7-14 10:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 62 楼』:  



  Quote:
Originally posted by zw19750516 at 2008-7-14 08:38 AM:
老土,代码第一是考虑效率,第二才是简洁,你这个方案存在效率问题,同时('echo %str%')可以修改为("%str%")。

考虑了下, 不得不面对效率不高的问题, 所以修改如下:
@echo off
set/p input=请输入:
set string=0123456789abcdefghij

:pro1
set str=%input:~0,1%
set input=%input:~1%
call set string=%%string:%str%=#%%
if defined input goto pro1
set "str= "

:pro2
set str=%string:~-1%%str%%string:~0,1%
if %string:~0,1%==# set str=#%str:~1,-1%%#
if %string:~-1%==# set str=#%str:~1,-1%%#
set string=%string:~1,-1%
if not defined string goto end
goto pro2

:end
for /f "tokens=1,2 delims= " %%i in ("%str%") do echo %%j ^| %%i
pause
这下速度同样飞快了.

   此帖被 +6 点积分      点击查看详情   
评分人:【 bat-zw 分数: +6  时间:2008-7-14 16:06




我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-7-14 13:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


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

还有个问题要指出一下:
if 判断语句的最好加上引号 if "%string:~0,1%"=="#" 或 if "%string:~0,1%" equ "#"



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

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 64 楼』:  

再精简一下,思路更加清晰
@echo off
set/p input=请输入:
set tab=012t456789abcd6fghi3

:pro1
call set tab=%%tab:%input:~0,1%=#%%
set input=%input:~1%
if defined input goto pro1

set "out= "
:pro2
set out=#%out%#
if not "%tab:~0,1%"=="#" if not "%tab:~-1%"=="#" set out=%tab:~-1%%out:~1,-1%%tab:~0,1%
set tab=%tab:~1,-1%
if defined tab goto pro2

for /f "tokens=1,2 delims= " %%i in ("%out%") do echo %%j ^| %%i
pause


2008-7-14 18:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





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



  Quote:
Originally posted by qzwqzw at 2008-7-14 18:34:
再精简一下,思路更加清晰

@echo off
set/p input=请输入:
set tab=012t456789abcd6fghi3
:pro1
call set tab=%%tab:%input:~0,1%=#%%
set input=%input:~1%
if defined input ...

怎么显示输入的变成#
我改一下
@echo off
setlocal enabledelayedexpansion
set/p input=请输入:
set tab=012t456789abcd6fghi3
set str=%tab%
set /a n-=1,m=0
:pro1
call set tab=%%tab:%input:~0,1%=#%%
set input=%input:~1%
if defined input goto pro1
:pro2
set/a n+=1,m-=1
if "!tab:~,1!"=="#" (set var1=!var1!!str:~%n%,1!&set var2=!str:~%m%,1!!var2!)else (
    if "!tab:~-1!"=="#" (set var1=!var1!!str:~%n%,1!&set var2=!str:~%m%,1!!var2!)else set var1=%var1%#&set var2=#%var2%)
set tab=%tab:~1,-1%
if defined tab goto pro2
echo %var1% ^| %var2%
pause




简单!简单!再简单!
2008-7-14 23:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] [5] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: