|
huahua0919
银牌会员
积分 1608
发帖 780
注册 2007-10-7
状态 离线
|
『楼 主』:
如何检查一字符串中相同字符的个数
set string=aferefwfwerergrgreaaffwafwa
用bat怎么检查以上字符串中字符a出现的次数(可不能用字符截取功能)
|
|
2008-4-12 19:13 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
|
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 |
|
|
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 |
|
|
zh159
金牌会员
积分 3687
发帖 1467
注册 2005-8-8
状态 离线
|
|
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 |
|
|
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 来自 广西
状态 离线
|
|
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 |
|