帮我修改下面这段VB代码 统计数字出现的频率代码

这是一位好心的网友给我编写的,当时我没说清楚.控件:text1,text2,command1(文本框要多行显示)PrivateSubCommand1_Click()Dim... 这是一位好心的网友给我编写的,当时我没说清楚.
控件:text1,text2,command1(文本框要多行显示)
Private Sub Command1_Click()
Dim a() As String
a = Split(Text1.Text, vbCrLf)
For i = 0 To UBound(a)
n = 0
For j = i + 1 To UBound(a)

If a(i) = a(j) Then
n = n + 1
a(j) = ""
End If
Next
If a(i) <> "" Then
Text2.Text = Text2.Text & a(i) & "出现" & n + 1 & "次" & vbCrLf
End If
Next
End Sub
这段代码我若是在text1里里输入:
78
45
12
89
65
23
1
45
21
78
23
56
78
89
78
785
而运行时结果在text2里面显示:
78出现4次
45出现2次
12出现1次
89出现2次
65出现1次
23出现2次
1出现1次
21出现1次
56出现1次
785出现1次
这个结果有点太长了,我想让它显示为:
78出现4次 (这里都有回车)
45,89,23出现2次
12,65,1,21,56,785出现1次
并要它按出现频率从大到小排列.这样显示更为直观一些.
展开
 我来答
swx1995
2009-01-29 · TA获得超过2696个赞
知道大有可为答主
回答量:1477
采纳率:0%
帮助的人:2353万
展开全部
Private Sub Command1_Click()
Dim a() As String, i as integer,j as integer,c() as string,n as integer

a = Split(Text1.Text, vbCrLf)
redim preserve c(0) 'c就是记录次数的数组,如c(1)就代表出现过1次的数。

For i = 0 To UBound(a)
n = 0

For j = i + 1 To UBound(a)
If a(i) = a(j) Then
n = n + 1
a(j) = ""
End If
Next j

If a(i) <> "" Then
if n+1 > ubound(c) then redim preserve c(n+1) '记录次数的数组。如果现在的次数大于c数组里面最大的次数则重新定义数组大小
c(n+1) = c(n+1) & " " & a(i) '用空格不用,。因为如果用了,,那么就会变成类似“,1,2,5,103”。用空格的话可以直接利用函数清除首尾空格~~
end if
Next i

for i = ubound(c) to 0 step -1 '倒序排列,最大的先
if c(i)<>"" then '使用过(因为是最大次数,所以里面有可能有非连续的使用次数
Text2.Text = Text2.Text & replace(trim(c(i))," ",",") & "出现" & trim(i) & "次" & vbcrlf
'先将c(i)首尾空格取消(实际上只有首有空格),然后将空格替换为“,”,最后在末尾加上出现n次和回车
end if
next i
End Sub

实际增加内容很少。
steven_mig
2009-01-29 · TA获得超过658个赞
知道小有建树答主
回答量:801
采纳率:0%
帮助的人:475万
展开全部
这个得彻底改代码,用数组
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式