注册 登录
编程论坛 VB6论坛

字符串如何去重复?

yuma 发布于 2023-02-19 11:27, 1264 次点击
字符串示例:ace2iit、ace2iit、、ace2iit、
去重复后为:ace2iit、

[此贴子已经被作者于2023-2-19 18:28编辑过]

8 回复
#2
冬瓜汤2023-02-19 13:11
把字符串作为dictionary的key名,然后去重。这个百度一下,代码一大堆。
#3
yuma2023-02-20 18:47
回复 2楼 冬瓜汤
感谢,已解决。
#4
kings123332023-02-22 22:28
回复 3楼 yuma
咋解决的大佬,给个事例看看
#5
yuma2023-02-23 05:19
VBS版的,稍调试就是VB6版的。

TestStr = "abcd、3、、abcd、"
Result = ""
For i = 1 To Len(TestStr)
  If InStr(1, Result, Mid(TestStr, i, 1), 1) > 0 Then
  TestStr = Replace(TestStr, Mid(TestStr, i, 1), "")
  'MsgBox TestStr
  Else
   Result = Result + Mid(TestStr, i, 1)
  End If
Next
MsgBox Result

MyTest = ""
For k = 1 To Len(Result)
  resk = Mid(Result, k, 1)
  Value = 0
  For t = 1 To Len(TestStr)
     Rest = Mid(TestStr, t, 1)
     If resk = Rest Then
       Value = Value + 1
     End If
  Next
  MyTest = MyTest & "字符串为" & resk & " 次数为:" & Value & vbCrLf
Next
MsgBox MyTest
#6
kings123332023-02-23 21:38
回复 5楼 yuma
数组+字典 如何实现?
#7
wds12023-03-25 11:31
如果使用字典去重,需要引用《Microsoft scripting runtime》
具体事例如下:
Private Sub Command1_Click()
  Dim arr(5)
  arr(0) = "att"
  arr(1) = "att1"
  arr(2) = "att"
  arr(3) = "att2"
  arr(4) = "att5"
  arr(5) = "att2"
  ’数组+字典剃重
  Dim dict As New Dictionary
  For i = 0 To UBound(arr)
    If Not dict.Exists(arr(i)) Then dict.Add arr(i), ""
  Next i
  '输出
  For Each Key In dict.Keys
    Debug.Print Key
  Next Key
End Sub
输出结果:
att
att1
att2
att5   
#8
yuma2023-03-28 21:01
以下是引用kings12333在2023-2-23 21:38:39的发言:

数组+字典 如何实现?

   
   
这个算法使用了一个字典对象来存储数组中的元素。首先创建一个空的字典对象,然后遍历数组中的每个元素。如果字典中不存在该元素,则将该元素添加到字典中,并将其值设为 1。最后,将字典中的键(即不重复的元素)赋值给原数组。
这个算法的时间复杂度为 O(n),因为只需要遍历一次数组,并且字典的添加和查找操作的时间复杂度为 O(1)。同时,这个算法也不需要使用额外的空间来存储删除后的数组,因为直接将字典中的键赋值给原数组即可。

Private Sub RemoveDuplicates(ByRef arr() As Variant)
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
   
    Dim i As Long
    For i = LBound(arr) To UBound(arr)
        If Not dict.Exists(arr(i)) Then
            dict.Add arr(i), 1
        End If
    Next i
   
    arr = dict.Keys
End Sub

Private Sub Form_Load()
Dim arr() As Variant
arr = Array(1, 2, 3, 2, 4, 5, 3)
RemoveDuplicates arr
For Each i In arr
MsgBox i
Next
End Sub
#9
kings123332023-03-30 18:07
回复 7楼 wds1 回复 8楼 yuma
感谢两位大师...
1