中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-26 05:16
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [精彩][批处理字符出现次数统计] 精华I 查看 23,289 回复 41
16 发表于 2006-11-30 02:49 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  各位的代码都很精彩,比起我的 sort 方案来,高明了很多,给各位加分!
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
17 发表于 2006-11-30 02:53 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  我做的方案在这里
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
18 发表于 2006-11-30 02:58 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
redtek的利用shift移位,set .的按顺序显示特性

增加出现次数最多的显示^_^

@echo off
setlocal EnableDelayedExpansion
set str=adadfdfseffserfefsefseetsdg

:loop
set str$=%str$% %str:~0,1% && set str=%str:~1%
if not "%str%" == "" goto loop

call :start %str$%
set .
echo 出现次数最多的:%max%=%maxN%
pause
exit

:start
if == ( goto :eof ) else ( set /a .%1+=1 )
if !.%1! GTR !maxN! set maxN=!.%1!&&set max=.%1
shift
goto :start


修改了BUG

[ Last edited by zxcv on 2006-11-29 at 08:27 PM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
youxi01 +2 2006-11-30 05:30
19 发表于 2006-11-30 03:14 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
namejm兄17楼的方案 “做一个文本中关于内容统计的批处理” 正在欣赏,里面的代码真是有意思,太精彩了~~:)))

回zxcv兄:我15楼代码没有做出现次数最多的那部分是因为我不会做(偷偷的说~)
真是精彩~~跟namejm、zxcv兄学习了~:)))
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
20 发表于 2006-11-30 03:18 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
俺是现学现用
都是学习好榜样
21 发表于 2006-11-30 03:33 ·  中国 湖南 娄底 新化县 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
19年会员
UID 58987
来自 湖南.娄底
状态 离线
厉害, 各位加油^_^
业精于勤而荒于嬉,形成于思而毁于随。
22 发表于 2006-11-30 03:48 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
if !.%1! GTR !maxN! set maxN=!.%1! && set max=.%1
if %%j GTR !l! set l=%%j & set m=%%i

namejm和zxcv兄的这句有意思~~

找出最大的一个数,如果取到的值大于 “存储最大值的变量” ,则说明取到的数更大,则让它来代替原 “存储最大值的变量” 内,
当数据全“走”过一遍以后,“存储最大值的变量” 内的值自然是最大的值~:)

欣赏加狂顶!!!
又学到很多东东,交流碰撞出很多灵感~~
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
23 发表于 2006-11-30 04:13 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线

  刚才测试了一下18楼的代码,在18楼代码的基础上,我增加了str变量的值,把它设置为:set str=adadfdfseffserfefsefseetsdgdsfjkljdsklfjdsfdsgdsafdsaf,然后运行批处理,结果:

.a=4
.d=10
.e=6
.f=12
.g=2
.j=3
.k=2
.l=2
.r=1
.s=11
.t=1
出现次数最多的:.f=9
请按任意键继续. . .
24 发表于 2006-11-30 04:31 ·  中国 浙江 宁波 鹏博士宽带
荣誉版主
★★★
积分 1,338
发帖 356
注册 2005-07-15 12:09
20年会员
UID 40733
性别 男
状态 离线
后面的越来越精彩了,这样的交流大家收获都不少,学习的还快,还有趣味。
建议以后大家多发现一些这样的问题,要求不要太难,重在参与。
大家讨论一下以后可不可以每期增加一些名誉性的奖项,比如:
代码最短
速度最快
稳定性最强
创意最好
还有一种谁都看不明白,但是能完成功能。

从这几个角度充分发挥大家的发散思维。不过,类似这样的名字怎么取...
  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

25 发表于 2006-11-30 04:49 ·  中国 甘肃 甘南藏族自治州 合作市 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
还有一种谁都看不明白,但是能完成功能

呵呵,这个非无奈何斑竹你魔术了
26 发表于 2006-11-30 05:08 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
那版主的名字就是 “空前绝后” 这名字棒吧~~
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
27 发表于 2006-11-30 05:20 ·  中国 北京 朝阳区 联通
高级用户
★★
朦胧的世界
积分 579
发帖 218
注册 2006-10-24 04:29
19年会员
UID 67972
状态 离线
MS出现次数最多的结果都不太对,问题出在那里?

认识自己,降伏自己,改变自己
,才能改变别人!
28 发表于 2006-11-30 05:23 ·  中国 广东 清远 联通
高级用户
★★
积分 846
发帖 247
注册 2006-10-27 12:03
19年会员
UID 68504
性别 男
来自 湖南==》广东
状态 离线
也贴一段不成熟的代码,统计各字符出现的次数:
思路:先用“函数”test取得变量str的长度,保存为OSlen;
然后取得变量的第一个字符,保存为str0,然后将变量str中的str0全部替换为空,再获取str的长度,保存为%num%,那么第一个出现的字符为:%str0%,长度为:%OSlen%-%num%,依次类推.....

@echo off
setlocal EnableDelayedExpansion
set str=adadfdfseffserfefsefseetsdg
call :test %str%

for /l %%i in (0 1 100) do (
set /a OSlen=!num!
set str%%i=!str:~0,1!
call :test1 !str! !str%%i! %%i)

:exit
pause>nul
exit

:test
set /a num=0
set var=%1
for /l %%i in (1 1 100) do (
set var_=!var:~%%i,1!
if "!var_!"=="" set /a num=%%i &&goto :eof)
goto :eof

:test1
set var=%1
set var_=%2
set num_=%3
set str=!var:%var_%=!
if "%str%"=="" goto :exit
call :test %str%

set /a len%num_%=!OSlen!-!num!
echo 字符 %2 出现的次数 !len%num_%!


[ Last edited by youxi01 on 2006-11-30 at 06:47 AM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
redtek +5 2006-11-30 05:51
29 发表于 2006-11-30 05:29 ·  中国 北京 朝阳区 联通
高级用户
★★
朦胧的世界
积分 579
发帖 218
注册 2006-10-24 04:29
19年会员
UID 67972
状态 离线
用for /l 的我也贴一个!
@echo off&setlocal enabledelayedexpansion
set str=adadfdfseffserfefsefseetsdgdsfjkljdsklfjdsfdsgdsafdsaf

for /l %%i in (0,1,100) do (
if "!str:~%%i,1!"=="" goto end
call :define !str:~%%i,1!
set/a !str:~%%i,1!+=1
)

:end
for /l %%x in (1,1,%num%) do (
call set exchang=%%!%%x!%%
call echo !%%x!--%%!%%x!%%个
if !exchang! gtr !max! call set max=%%!%%x!%%&set maxstr=!%%x!)
echo.&echo.出现次数最多的是%maxstr%=%max%次
pause>nul&goto :eof

:define
if not defined %1 set/a num+=1&&set !num!=%1
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
redtek +5 2006-11-30 05:52

认识自己,降伏自己,改变自己
,才能改变别人!
30 发表于 2006-11-30 06:10 ·  中国 广东 清远 联通
高级用户
★★
积分 846
发帖 247
注册 2006-10-27 12:03
19年会员
UID 68504
性别 男
来自 湖南==》广东
状态 离线
欣赏15、18楼的代码,学习了!对以上代码稍做了改动,灵魂不变!

@echo off
setlocal EnableDelayedExpansion
set str=adadfdfseffserfefsefseetsdg

for /l %%i in (0 1 100) do (
if "!str:~%%i,1!"=="" goto :exit
set /a .!str:~%%i,1!+=1)
:exit
set.
for /f "delims== tokens=1,2" %%i in ('set.') do (
if %%j GTR !maxl! set /a maxl=%%j && set max=%%i)
echo 出现最多的是 %max:.=% 字符,共 %maxl% 个
pause
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
redtek +5 2006-11-30 08:31
论坛跳转: