返回列表 发帖
:StrLen
setlocal enableextensions
set "str=a%~2"
set "str=%str:"=s%"
set "str=%str:^^=s%"
set "str=!str:%%=s!"
set /a strlength=0
:StrLen_1
set /a strlength+=1
if not "!str:~%strlength%,1!"=="" goto StrLen_1
endlocal&set /a "%~1=%strlength%-1"
goto :EOFCOPY


如果作为库函数的话,我觉得LS的代码不行,因为你不知道变量可能的长度,就把for设定在10000了,缺乏通用性

如果要完全通用的话,就要把10000改成2^31-1,就是2147483647

改完之后,执行时间就增长了。。。

TOP

RE:  defanive兄
我前面这样处理 是因为 变量的的长度是有限制的  这个以前有讨论
执行时间  视变量长度  不是一直循环的 空值就退出啊
下面的代码  前面贴有的  我只是简化下  应该也可判断
@echo off&setlocal enabledelayedexpansion
set/p str=Type :
:lp
if defined str (
    set/a n+=1
    set str=!str:~1!
    goto lp
)
echo %n%
pauseCOPY
1

评分人数

TOP

27楼代码 是否可简化下?
@echo off&setlocal enabledelayedexpansion
set/p str=Type :
:lp
if not "!str:~%n%,1!"=="" set /a n+=1&goto lp
echo;%n%
pauseCOPY

TOP

:StrLen
setlocal enableextensions
set "str=%~2"
:StrLen_1
if defined str (
        set/a n+=1
        set "str=%str:~1%"
        goto StrLen_1
)
endlocal&set "%~1=%n%"
goto :EOF

函数整理成这样了,同意么?

TOP

回复 33楼 的帖子

defan是想用函数的形式做这个东西

标签是 :StrLen
用类似 call :StrLen "var" "字符串" 的形式调用
var是用来返回 字符串长度 的变量名

我小改一下就又出现麻烦了 还请 terse 指教一二。
[url=][/url]

TOP

1-1
@echo off
set "a= i like the bathome,because here is the batch of the world."
set /a num=0
:loop
set /a num+=1
set a=%a:~1%
if "%a%"=="" (goto :ne1) else goto :loop
:ne1
echo %num%
pauseCOPY

TOP

回复 34楼 的帖子

不能支持特殊字符的话,叫做函数是否不太好呢?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

看不懂哦,那个什么~:什么什么的,在那有详细的介绍。先谢谢了

TOP

回复 38楼 的帖子

本论坛教学区搜索“set”
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

原帖由 Batcher 于 2008-8-15 08:39 发表
1.1@echo off
set str=i like the bathome,because here is the batch of the world.
for /f "skip=1 delims=:" %%a in ('^(echo "%str%"^&echo.^)^|findstr /o ".*"') do set /a length=%%a-5
echo %length%


我不是很明白 set /a length=%%a-5,为什么减5,我见过减2的。能给解释一下吗?
(*^_^*)

TOP

回复 40楼 的帖子

你能先解释一下为什么减2吗?
然后我再说说减5的原因。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 41楼 的帖子

减2,是因为减去回车和换行
(*^_^*)

TOP

回复 42楼 的帖子

开始
运行
cmd
分别运行下面两个命令
(echo "bathome"&echo.)|findstr /o ".*"
(echo bathome&echo.)|findstr /o ".*"
思考一下为什么减5?思考一下为什么减2是错的?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 43楼 的帖子

我的意思不是说在这道题中减2,我只是在别的代码中见过减2的,这里减5是对的,我只是很不明白这个原理。

我把你说的这两个代码实验了
(echo "bathome"&echo.)|findstr /o ".*"
(echo bathome&echo.)|findstr /o ".*"
实验结果是:
0:"bathome"
12:

0:bathome
10:

我还是没明白什么原理。我只是发现你给的两种代码因为有 ""  号,而两个值不同了。
(*^_^*)

TOP

回复 44楼 的帖子

能把你看到的减2的代码贴出来看看么,最好能够注明出处?然后我告诉你我的代码中减5的原理。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表