Board logo

标题: 如何检查一字符串中相同字符的个数 [打印本页]

作者: huahua0919     时间: 2008-4-12 19:13    标题: 如何检查一字符串中相同字符的个数

set string=aferefwfwerergrgreaaffwafwa
用bat怎么检查以上字符串中字符a出现的次数(可不能用字符截取功能)
作者: terse     时间: 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
P处理
作者: bat-zw     时间: 2008-4-12 20:49    标题: 我也来一个:

思路是计算两段字符长度差:
@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 ]
作者: bat-zw     时间: 2008-4-12 20:52


  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 ...

高,利用变量移位,的确是高!!!
作者: zh159     时间: 2008-4-12 20:53

@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

作者: huahua0919     时间: 2008-4-12 20:56


  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的也不错,就是效率和通用性都有所降低!
谢谢大家

”一天不来论坛就感觉退步很多,不管你牛还是不牛“
作者: abcd     时间: 2008-4-12 21:01
set str=%str:~1%

难道这样就不是字符截取了吗??
作者: huahua0919     时间: 2008-4-12 21:05
我原先的意思是用字符串截取然后用findstr判断的,故自认为用字符截取会导致效率相当底,忘却用if判断!
我在写代码时遇到这个问题,所以向大家求助!现在可以解决很多问题了
再次感谢大家
作者: s11ss     时间: 2008-4-12 21:05


  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兄的更牛,统计出了所有不同字母各自出现的次数。
作者: huahua0919     时间: 2008-4-12 21:21
仔细看了zh159兄的代码才发现 原来  set /a 还可以这么用
@echo off
set a=b
set /a a+=1
echo %a%
pause

作者: moniuming     时间: 2008-4-12 22:48
5楼就是牛
作者: plp626     时间: 2008-4-12 23:15
来迟了,这个早有了,大家怎么就没注意精华帖:

批处理字符出现次数统计:
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

作者: HAT     时间: 2008-4-12 23:51
zh159 兄的代码果然强大,学习。
作者: mkd     时间: 2008-4-13 22:43

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