[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

回复 1楼

  1. ……无论变量的字符数是多少,(1-8189)for /L 都只需循环14次即可得到结果,……
复制代码
为什么要进行14次循环折半?
我们知道,微软说字符串最大长度是8192个字符(实际上还要小一些),因为8192=2^13,所以13次循环折半足矣。

TOP

本帖最后由 yzlsc 于 2012-3-16 00:10 编辑

刚才测试N次总是不对,原来没看清LZ最后一句: “书写时注意别在后面误加空格。。。”,问题就出在把set s=%%a&set /a sun+=1改成了set s=%%a & set /a sun+=1,&两边各加了一个空格。新手啊,没办法。

TOP

自己也照葫芦画瓢写了一个,满有趣的
  1. @echo off
  2. rem 字符串长度上限;替换8为你想要的数值,但值必须是2的冪
  3. set /a nem=8
  4. rem 前面以2为底的冪的指数
  5. set /a lop=3
  6. setlocal enabledelayedexpansion
  7. :test
  8. cls
  9. set /p "str=输入字符串:"
  10. if not defined str echo.   输入为空...&goto test_end
  11. set /a max=%nem%,min=0
  12. echo max : min  :  length
  13. echo ( x + y ) / 2 = z
  14. echo.
  15. for /l %%a in (1,1,%lop%) do (
  16.    set /a "length=(max+min)/2"
  17.    echo ^(!max!^) + ^(!min!^) ==^> ^(!length!^)
  18.    for /f "delims=" %%b in ("!length!") do (
  19.       if "!str:~%%b!" equ "" (
  20.          echo 完成折半,提取完成,字串第^(!length!+1^)位^(为^)空,继续逼近,设置max^(!max!^)为length^(!length!^)
  21.          set /a max=length
  22.       ) else (
  23.          echo 完成折半,提取完成,字串第^(!length!+1^)位^(非^)空,开始远离,设置min^(!min!^)为length^(!length!^)
  24.          set /a min=length
  25.    )  )
  26.    echo ^(!max!^) ^| ^(!min!^) ^<== ^(!length!^)&echo.
  27. )
  28. rem 如果提取字串不为空则+1
  29. if "!str:~%length%!" neq "" set /a length+=1&echo 不为空+1
  30. echo.
  31. rem 继续判断是否溢出
  32. if "!str:~%length%!" neq "" (echo.   字符串str超过%nem%个字符) else echo.   经计算字符串str共有!length!个字符
  33. :test_end
  34. pause>nul
  35. goto test
复制代码

TOP

返回列表