中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何检查一字符串中相同字符的个数
作者:
标题: 如何检查一字符串中相同字符的个数 上一主题 | 下一主题
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『楼 主』:  如何检查一字符串中相同字符的个数

set string=aferefwfwerergrgreaaffwafwa
用bat怎么检查以上字符串中字符a出现的次数(可不能用字符截取功能)

2008-4-12 19:13
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





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


@echo off
set "str=aferefwfwerergrgreaaffwafwa"
:lp
if defined str (
if "%str:~0,1%"=="a" set/a n+=1
set str=%str:~1%
goto lp
)
echo %n%
pause
P处理

   此帖被 +8 点积分        点击查看详情   
评分人:【 huahua0919 分数: +8  时间:2008-4-12 20:52




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

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 3 楼』:  我也来一个:

思路是计算两段字符长度差:
@echo off&setlocal enabledelayedexpansion
set str=aferefwfwerergrgreaaffwafwa
set var=%str:a=%
for /l %%i in (1,1,100) do if "!str:~%%i,1!"=="" set num1=%%i&goto :1
:1
for /l %%i in (1,1,100) do if "!var:~%%i,1!"=="" set num2=%%i&goto :2
:2
set /a num=!num1!-!num2!
echo 变量中有!num!个a
endlocal
pause>nul
[ Last edited by zw19750516 on 2008-4-12 at 08:53 PM ]



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

永远的学习者


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



  Quote:
Originally posted by terse at 2008-4-12 20:43:
[code]
@echo off
set "str=aferefwfwerergrgreaaffwafwa"
:lp
if defined str (
if "%str:~0,1%"=="a" set/a n+=1
set str=%str:~1%
goto lp
)
echo %n%
pause
[/code ...

高,利用变量移位,的确是高!!!



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




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 5 楼』:  


@echo off
set "str=aferefwfwerergrgreaaffwafwa"
set/p= %str% 中有<nul
:loop
set /a %str:~0,1%+=1&set str=%str:~1%&if defined str goto loop
echo  a %a% 个
pause


   此帖被 +13 点积分      点击查看详情   
评分人:【 s11ss 分数: +5  时间:2008-4-12 21:03
评分人:【 huahua0919 分数: +4  时间:2008-4-12 21:25
评分人:【 moniuming 分数: +4  时间:2008-4-12 22:49




2008-4-12 20:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by terse at 2008-4-12 08:43 PM:
[code]
@echo off
set "str=aferefwfwerergrgreaaffwafwa"
:lp
if defined str (
if "%str:~0,1%"=="a" set/a n+=1
set str=%str:~1%
goto lp
)
echo %n%
pause
[/code ...

厉害!
我也写过个,效率相当底,terse兄的代码不错~
我加分
zh159的代码意思和terse差不多!
zw19750516的也不错,就是效率和通用性都有所降低!
谢谢大家

”一天不来论坛就感觉退步很多,不管你牛还是不牛“

2008-4-12 20:56
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 7 楼』:  

set str=%str:~1%

难道这样就不是字符截取了吗??

2008-4-12 21:01
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 8 楼』:  

我原先的意思是用字符串截取然后用findstr判断的,故自认为用字符截取会导致效率相当底,忘却用if判断!
我在写代码时遇到这个问题,所以向大家求助!现在可以解决很多问题了
再次感谢大家

2008-4-12 21:05
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by zh159 at 2008-4-12 08:53 PM:
@echo off
set "str=aferefwfwerergrgreaaffwafwa"
set/p= %str% 中有<nul
:loop
set /a %str:~0,1%+=1&set str=%str:~1%&if defined str goto loop
echo  a %a% 个
pause

zh159兄的更牛,统计出了所有不同字母各自出现的次数。

2008-4-12 21:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 10 楼』:  

仔细看了zh159兄的代码才发现 原来  set /a 还可以这么用
@echo off
set a=b
set /a a+=1
echo %a%
pause


2008-4-12 21:21
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 11 楼』:  

5楼就是牛

2008-4-12 22:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 12 楼』:  

来迟了,这个早有了,大家怎么就没注意精华帖:

批处理字符出现次数统计:
http://www.cn-dos.net/forum/view ... ghlight=&page=1

这个是无奈何版主的:
@echo off

setlocal ENABLEDELAYEDEXPANSION

set str=adadfdfseffserfefsefseetsdg

set /a m=0,n=0,l=0

call :loop

for /f "tokens=1,2 delims==" %%i in ('set 字符:') do (

        echo %%i=%%j

        if %%j GTR !l! set l=%%j & set m=%%i

)

echo.出现次数最多的%m%=%l%

pause

goto :EOF

:loop

call set m=%%str:~%n%,1%%

if not defined m goto :EOF

set /a "字符:%m%+=1"

set /a n+=1

goto loop
这个是zh159终结版的:
@echo off
setlocal EnableDelayedExpansion
set str=adadfdfseffserfefsefseetsdgadadfdfseffserfefsefseetsdga

:loop
set str$=%str$% %str:~0,1%&set str=%str:~1%
if not "%str%" == "" goto loop

for %%n in (%str$%) do (
  set /a .%%n+=1
if !.%%n! GTR !maxN! set maxN=!.%%n!&&set max=%%n)
set .
echo 出现次数最多的:%max%=%maxN%
pause
exit




山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-4-12 23:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 13 楼』:  

zh159 兄的代码果然强大,学习。

2008-4-12 23:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
mkd
初级用户





积分 109
发帖 30
注册 2007-9-5
状态 离线
『第 14 楼』:  


set "str=aferefwfwerergrgreaaffwafwa"

set /p word= word ?
set "str=%str:"=%"
set  str="%str%"
call set str=%%str:^%word%=--"  "--%%
for %%a in (%str%) do set /a num+=1
set /a num-=1
echo %num%
pause


2008-4-13 22:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: