标题: [其他] 批处理怎样高效率统计出变量值中字母和数字的个数? [打印本页]
作者: heyoug 时间: 2011-11-14 18:18 标题: 批处理怎样高效率统计出变量值中字母和数字的个数?
本帖最后由 pcl_test 于 2016-9-13 19:29 编辑
例:
set /p AA=变量:
检查变量AA中包含有多少个英文和数字字符?我自己做了一个效率太低.
作者: CrLf 时间: 2011-11-14 18:45
计算原字符串长度,然后替换掉所有英文和数字,再计算长度...
作者: weichenxiehou 时间: 2011-11-14 20:36
本帖最后由 weichenxiehou 于 2011-11-14 20:37 编辑
回复 1# heyoug
效率也不高,呵呵,仅供娱乐。- @echo off&setlocal enabledelayedexpansion
- set/p str=input a string:
- :again
- if not "!str!"=="" echo,!str:~-1!>>temp.tmp&set "str=!str:~,-1!"&goto :again
- set/p=letters:<nul&findstr "[a-zA-Z] " temp.tmp|find /v /c ""
- set/p=numbers:<nul&findstr "[0-9] " temp.tmp|find /v /c ""
- del temp.tmp&pause>nul
复制代码
作者: HAT 时间: 2011-11-14 23:04
把你写的贴出来看看先
别人也好帮你优化
作者: raymai97 时间: 2011-11-15 02:26
本帖最后由 raymai97 于 2011-11-15 02:29 编辑
献丑了,special就是代表那些空格、逗号、句号- @echo off
- setlocal enabledelayedexpansion
- set /p a=Enter:
- set skip=0
- set /a text=0,num=0,special=0
- if "!a!"=="" goto result
- :loop
- if "!a:~%skip%,1!" lss "a" (
- if "!a:~%skip%,1!" lss "0" (
- set /a special+=1) else (set /a num+=1)
- ) else (set /a text+=1)
- set /a skip+=1
- if not "!a:~%skip%,1!"=="" goto loop
- :result
- echo text: %text%
- echo num: %num%
- echo special: %special%
- pause>nul
复制代码
作者: defanive 时间: 2011-11-15 06:32
本帖最后由 defanive 于 2011-11-15 06:42 编辑
- @echo off
- setlocal enabledelayedexpansion
- for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set v%%a=10000
- for /l %%a in (0,1,9) do set v%%a=1
- set /p str=
- echo !str!>tmp
- for %%a in (tmp) do set /a size=%%~za-3
- del /f /q tmp
- for /l %%a in (0,1,%size%) do set "exec=!exec!v!str:~%%a,1!+"
- 2>nul set /a t+=%exec%0
- set /a E=t/10000,N=t%%10000
- echo E:%E%,N:%N%
- pause
复制代码
我也来献丑一段
相对比较快,但是有字数限制,貌似2700左右
作者: defanive 时间: 2011-11-15 06:58
- @echo off
- set "str=abcdefghijklmnopqrstuvwxyz0123456789%~1"
- call :calc tmp
- goto :eof
- :calc
- setlocal enabledelayedexpansion
- >tmp echo\!str!
- set s1=%~z1
- for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set "str=!str:%%a=!"
- >tmp echo\!str!
- set s2=%~z1
- for /l %%a in (0,1,9) do set "str=!str:%%a=!"
- >tmp echo\!str!
- set s3=%~z1
- set /a E=s1-s2-26,N=s2-s3-10
- echo E:%E%,N:%N%
- del /f /q tmp
复制代码
真寂寞结果2L的是最快的。。
作者: heyoug 时间: 2011-11-15 10:20
@echo off&&setlocal ENABLEDELAYEDEXPANSION
set BLV=0&set BLU=0
set /P BLE=变量输入:
:BQM
if not "!BLE:~%BLV%,1!"=="" echo 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ|find "!BLE:~%BLV%,1!">nul&&set /A BLU=%BLU%+1
if not "!BLE:~%BLV%,1!"=="" set /A BLV=%BLV%+1&&goto BQM
echo %BLU%
pause
这个是我写的代码,一个一个字母的判定,所以效率低。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |