标题:想统计一下文本中字符出现的次数,有什么好的思路
只看楼主
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
结帖率:89.13%
 问题点数:0 回复次数:4 
想统计一下文本中字符出现的次数,有什么好的思路
想统计一下文本中字符,每两个字符为一组,在文本出现了多少次?有什么好的算法思路?

例如:
4d 出现了多少次?
5a 出现了多少次?
90 出现了多少次?
00 出现了多少次?
…………
文本内容截图如下:
搜索更多相关主题的帖子: 文本 出现 思路 多少 字符 
2022-01-07 11:29
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
要不要严格按照位置来计算,如
34 d5 a9 f0 00
这种的按你图片中没有空格后的字符串为
34d5a9f0000

直接搜索字串,包含 4d ,算不是符合你的要求?
一、如果符合你的要求,
使用 替换函数 ,替换为空白,然后(前面的长度-后面的长度)/2

二、如果不符合你的要求
把字符串,按16进制转换为数值,保存到 byte 数组 里,
然后循环搜索整个数组计数。

授人于鱼,不如授人于渔
早已停用QQ了
2022-01-07 19:53
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
按位置计算怎么算法?

直接搜索4d不好,例如:3c 04 d3 这种,是两个为一组的。

替换成空白好像可行。

这是字符串,不一定用来统计十六进制代码。这方法不好。

不知还有没有更好方法。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-01-07 21:12
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
程序代码:
'**************方法二*******************
Dim s As String
's应该是文件或什么地方取值,这里只是示例
s = "4d5a90000300000004000000ffff0000b800000000000004000000000000000000000000000000000000000000000000000000000000e80000000e1fba0e00b409cd21b8014ccd21546869732070726f6772616d2063616e6e6f42062652072756e20696e20444f53206d6f64652e0d0d0a24000000000000c60ce8b5826d86e6826d86e6826d86e6ed1b2de6a76d86e6ed1b18e69b6d86e68b1515e6936d86e6826d87e6c46c86e6ed1b2ce6596d86e6ed1b1ce6836d86e6ed1b1be6836d86e652696368826d860000000000000000000000000000000000504500004c010500305b6c5900000000000000e00002010b010a000088070000d0020000000009ecb0600000000000a007000000400001000000200005000100000000005000100000000000900a000004000000000000200408100001000000000000010000010000000000001000000000000000007c550900b40000000f00900382e0000000000000000000000000000000200a009859000000000000000000000000000000000000000000000000185009004000000000000000000000a007000805000000000000000000000000000000000000002e7465787400000768607000010000008807000004000000000000000000000200000602e7264617461000018d1010000a0070000d201000080700000000000000000040000402e64617461"

Dim a() As Byte
Dim i As Long, j As String, o As Long


'对半定义数组
o = Len(s) / 2
ReDim a(o)

'循环取两个字符,十六进制字符串转数值保存到数组里
For i = 1 To o Step 2
    j = Mid(s, i * 2 - 1, 2)
    a(i) = CByte("&H" & j)
Next i

'后面的查找就不写了。循环比较就是了。


授人于鱼,不如授人于渔
早已停用QQ了
2022-01-08 09:32
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
我用其它方法实现了,你最上面的方法提醒了我。比你的方法简单。

实现的代码在:http://bbs.,有兴趣的话可以看一下。



[此贴子已经被作者于2022-1-9 12:23编辑过]


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-01-08 10:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-508092-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.056746 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved