标题: [数值计算] 批处理 字符计算 最终版 [Raymai97作品] [打印本页]
作者: raymai97 时间: 2011-12-13 12:49 标题: 批处理 字符计算 最终版 [Raymai97作品]
昨天花了点时间整理下,做了个 批处理字符计算,里面附了关于这方面的知识,方便以后的新手查看使用
可以分析出多少个:
* 中文字
* 英文字
* 数字(全角+半角)
* 空格与符号(全角+半角)
代码:- @echo off
- setlocal enabledelayedexpansion
- title 批处理 字符计算 最终版 [Raymai97作品]
- color 0f
- mode con cols=80 lines=25
- :menu
- set sel=&cls
- echo,
- echo, // 批处理 字符计算 最终版【支持英文、中文、数字、符号】 by Raymai97 //
- echo,
- echo, 请选择:
- echo,
- echo, 1 小麦(raymai97)在这方面研究所得的珍藏知识
- echo,
- echo, 2 使用 批处理字符计算器 【小麦原创】
- echo,
- echo, 3 批处理论坛 bbs.bathome.net
- echo,
- echo, Q 退出
- echo,
- set /p sel=^>
- if "!sel!"=="1" goto maidata
- if "!sel!"=="2" goto textcalc
- if "!sel!"=="3" start "" "http://bbs.bathome.net/"
- if "!sel!"=="Q" exit
- goto menu
- :maidata
- set sel=&cls
- echo,
- echo, // 妙用if,区别并计算字符 //
- echo,
- echo, set a=(某一个字符)
- echo,
- echo, 当 %%a%% lss "a" 就是 全角 或 半角 的 符号、空格 或 数字 else 就是 英文字
- echo,
- echo, 当 %%a%% gtr "Z" 就是 中文字
- echo,
- echo, 当 %%a%% lss "0" 就是 全角 或 半角 的 符号、空格 else 就是 全角 或 半角 的 数字
- echo,
- echo, 以上为批处理检测的思路,可能有点复杂,简单点的分析:
- echo,
- echo, a-Z = 英文字 // 注意 //
- echo,
- echo, 多过 Z = 中文字 / 批处理必须一个一个分析 /
- echo,
- echo, 0-9 = 全角 或 半角 的数字
- echo,
- echo, 少过 0 = 全角 或 半角 的符号、空格
- echo, --------------------------------------------------------------------------
- echo, 1 如果要区别 全角 和 半角 的符号、数字 和 空格 2 返回主菜单
- echo,
- set /p sel=^>
- if "!sel!"=="1" goto maidata2
- if "!sel!"=="2" goto menu
- goto maidata
- :maidata2
- set sel=&cls
- echo,
- echo, // 如果要区别 全角 和 半角 的符号、数字 和 空格 //
- echo,
- echo, 请看看这段东西:
- echo,
- echo, if "1" gtr "1" (echo yes) else (echo no)
- echo, yes
- echo, if "1" gtr "2" (echo yes) else (echo no)
- echo, no
- echo, if "," gtr "2" (echo yes) else (echo no)
- echo, no
- echo,
- echo, 这段东西是我在cmd里测试得到的东西(已echo off),从上面可以看出:
- echo,
- echo, 全角的1大过 半角的 1 但 小过 半角的 2
- echo,
- echo, 全角的,大过 半角的 , 但 小过 半角的 2
- echo,
- echo, 看到这里,不用我多说,你也大概能猜出要如何区别,并感到失望
- echo,
- echo, --------------------------------------------------------------------------
- echo, 1 返回主菜单
- echo,
- set /p sel=^>
- if "!sel!"=="1" goto menu
- goto maidata2
- :textcalc
- cls
- set text=
- set /a len=0,sym=0,en=0,ch=0,num=0
- echo, // 批处理字符计算器 12月12日完成 by Raymai97 //
- echo,
- set /p text=请输入:
- echo,
- echo, // 计算中 //
- if "!text!"=="" goto result
- :loop
- if "!text:~%len%!"=="" goto result
- if "!text:~%len%,1!" gtr "Z" (set /a ch+=1) else (
- if "!text:~%len%,1!" geq "a" (set /a en+=1) else (
- if "!text:~%len%,1!" lss "0" (set /a sym+=1) else (
- set /a num+=1)))
- set /a len+=1
- goto loop
- :result
- echo,
- echo, // 结果 //
- echo,
- echo, 全角/半角英文字:!en! 中文字:!ch!
- echo,
- echo, 全角/半角数字: !num! 全角/半角符号或空格:!sym!
- echo,
- echo, 总计:!len!
- echo,
- echo, // 任意键继续 //
- pause>nul
- goto textcalc
复制代码
作者: garyng 时间: 2011-12-14 11:22
// 计算中 //11:18:09.79
// 结果 //11:18:36.50
全角/半角英文字:214 中文字:90
全角/半角数字: 108 全角/半角符号或空格:609
总计:1021
你的弟弟来挺你啦~
不错嘛~
可是用折半法(虽然没计算 半角/全角 等字符)
11:21:20.29
1021
11:21:20.51
超快的啊!!
作者: raymai97 时间: 2011-12-14 11:40
回复 2# garyng
的确快,不过后来我还是觉得我的有优点,因为折半法的不是每个每个判断,算不到4种字符~
作者: CrLf 时间: 2011-12-14 15:26
回复 3# raymai97
如果配合变量替换就可以,哈哈。- ::计算字符串原始长度为 len1
- for /l (0 1 9) do set str=!str:%%a=!
- ::计算字符串排除数字后的长度为 len2
- set /a 数字=len1-len2
- for /l (a b c d e f g 等等...) do set str=!str:%%a=!
- ::计算字符串排除数字后的长度为 len3
- set /a 字母=len2-len3
- ::依此类推
复制代码
作者: wc726842270 时间: 2011-12-15 17:13
LZ还是把心思放在正经的学习上吧,你真的却认你一直在进步么?
作者: raymai97 时间: 2011-12-15 23:54
回复 5# wc726842270
好吧,我其实现在转学vb.net了,这个批处理做来是为了让方便以后查询~
现在批处理只是有空玩玩~ 基本很少玩了~
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |