中国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
状态 离线
『楼 主』:  如何检查一字符串中相同字符的个数 使用 LLM 解释/回答一下

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


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





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下


@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 楼』:  我也来一个: 使用 LLM 解释/回答一下

思路是计算两段字符长度差:
@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 楼』:   使用 LLM 解释/回答一下

Originally posted by terse at 2008-4-12 20:43:

@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

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




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




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

@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 楼』:   使用 LLM 解释/回答一下

Originally posted by terse at 2008-4-12 08:43 PM:

@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

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

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


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





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

set str=%str:~1%

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


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




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 8 楼』:   使用 LLM 解释/回答一下

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


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





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 9 楼』:   使用 LLM 解释/回答一下

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 楼』:   使用 LLM 解释/回答一下

仔细看了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 楼』:   使用 LLM 解释/回答一下

5楼就是牛


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

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 12 楼』:   使用 LLM 解释/回答一下

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

批处理字符出现次数统计:
http://www.cn-dos.net/forum/viewthread.php?tid=25182&fpage=1&highlight=&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 楼』:   使用 LLM 解释/回答一下

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


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





积分 109
发帖 30
注册 2007-9-5
状态 离线
『第 14 楼』:   使用 LLM 解释/回答一下


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
查看资料  发短消息  网志   编辑帖子  回复  引用回复

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


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



论坛跳转: