帮我修改下面这段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次
并要它按出现频率从大到小排列.这样显示更为直观一些. 展开
控件: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次
并要它按出现频率从大到小排列.这样显示更为直观一些. 展开
2个回答
展开全部
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
实际增加内容很少。
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
实际增加内容很少。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询