UID 418
精华 14
积分 3990
威望 53 点
宅币 1974 个
贡献 1582 次
宅之契约 0 份
最后登录 2017-10-9
在线时间 252 小时
用户组: 超级版主
No. 418
UID 418
精华 14
威望 53 点
宅币 1974 个
贡献 1582 次
宅之契约 0 份
在线时间 252 小时
注册时间 2014-8-9
这事儿要从我读高中时说起。。。那年 人们害怕而又迫切地等待着玛雅传说中的末日的来临。那年 略显青涩的我激动万分地踏进了高中高二的大门。那年 崭新发亮的17寸宏碁显示器来到了一个中学生破旧的desk top 上。那年 。。。。咳咳 年够了。。对,当时刚接触1年vb的我在写一款字频计算程序,字频计算嘛,“abccde”一串字符,其中 a几个 b几个?好了我写了如下代码(当时的source code丢掉了,因而对我的移动硬盘的考古工作无法进行,我就大概写一些,见笑了 )
Private Sub Command1_Click()
Dim atime As Integer
Dim btime As Integer
Dim ctime As Integer
Dim dtime As Integer
Dim etime As Integer
'......以下省略21个dim......
Dim i As Integer
For i = 1 To Len(text1.Text)
Dim s As String
s = Mid(text1.Text, i, 1)
If s = "a" Then
atime = atime + 1
End If
'......以下省略25个if闭包......
Next
MsgBox "亲,字符a出现了:" & atime & "次.出现频率为:" & atime / Len(text1.Text)
MsgBox "亲,字符b出现了:" & btime & "次.出现频率为:" & atime / Len(text1.Text)
'........以下省略24个msgbox...........
End Sub
复制代码
观看过我的代码的你,一定感慨万千。。。。(啊,老C啊,你TM真傻X啊¥#@%¥#W……%(-。-;)¥&……)
嗯!不准嘲笑我的智商,起码我是一个勤奋的程序员。
好的,过了大概几个月,我又对“字频计算 v0.01进行了改进”:
Private Sub Command1_Click()
Dim alphat(26) As Integer '呵呵,老C的学习能力如同沙耶,别小看我!!!
Dim i As Integer
For i = 1 To Len(text1)
alphat(Asc(id(text1, i, 1)) - 96) = UBound(Split(text1, "a"))
Next
For i = 1 To 26
text2 = text2 & "亲亲,字符a出现了:" & alphat(i) & "次.出现频率为:" & alphat(i) / Len(text1.Text) & vbCrLf
Next
End Sub 复制代码
亲啊,see see !10行代码 ! 有木有!有木有!
兴奋劲儿马上过去了。。。
卧槽,计算中文字频咋办?!
咋办!什么算法能实现?好啊,又是一顿苦苦搜寻,->《21天精通vb》《vb编程宝典》《金瓶梅》《乱七八糟什么日文,还是图片,你懂的。。》
没找到!!!瞎了呀,肾费了不少,代码却没出来《=嗯嗯,和谐 和谐。
好,开始研究人类咋计算字频。
duang~弄来a4那么大一张白纸,上书“你你你我我我他aabbccX井控X藤兰”开始一个一个找:“你,1个,你,两个,你,三个”
把我数成白痴了也没想出来。。
后来后来后来再后来。我突然有了灵感!!!我数“你”,“你”就进了我的大脑,第二次发现“你”我就搜索大脑,你今天有了么?有了!
那么bingo!你+1,以此类推。。。好了捉摸出这么一套算法,我把它称为计数算法
简而言之就是建立一个数组,在目标字符串内搜索字符,没该字符,“海马体”数组+1,计数+1.好了,老C献上PB算法:
'this is aint vb its pb code!!!!!
#Compile Exe
#Dim All
Macro Const = Macro
Const MAXSIZE = 100
Type ElementType
str As WString * 1
iCtr As Integer
End Type
Global ArrItem() As ElementType
Function PBMain () As Long
Dim ArrItem(MAXSIZE) As ElementType
Local i, j As Integer
Local str As WString
Local s As WString
str = "你你我我他他他aaaaaabc"
For i = 0 To MAXSIZE
ArrItem(i).str = Chr$(0)
Next
For i = 1 To Len(str)
ItemExists(Mid$(str, i, 1))
Next
j = 0: s = ""
While ArrItem(j).str <> Chr$(0) And j <= MAXSIZE
MsgBox ArrItem(j).str & ":" & Str$(ArrItem(j).iCtr)
j = j + 1
Loop
End Function
Sub ItemExists(ByVal it As WString)
Local i As Integer
While ArrItem(i).str <> Chr$(0) And i <= MAXSIZE
If it = ArrItem(i).str Then
ArrItem(i).iCtr = ArrItem(i).iCtr + 1
Exit Sub
End If
i = i + 1
Wend
For i = 0 To MAXSIZE
If ArrItem(i).str = Chr$(0) Then
ArrItem(i).str = it
ArrItem(i).iCtr = 1
Exit For
End If
Next
End Sub 复制代码
嗯,又要和大家说再见了,那么老C会讲悲剧嘛?当然不会,皆大欢喜大结局:老C的字频计算上头条:
最后祝你。。。。。学习快乐。。。再见
此贴略水 版主鼠下留情。。