Board logo

标题: [技术讨论] 【出题】vbs去除重复的字符串 [打印本页]

作者: batman    时间: 2011-5-24 01:31     标题: 【出题】vbs去除重复的字符串

已知字符串“bat home home Net home net Bat net”

要求用vbs去除所有重复的字符串(忽略大小写)

输出为“bat home net”
作者: dahual    时间: 2011-5-24 11:03

路过,花时间写了个来支持。
  1. Dim s '源字符串
  2. Dim final '最终字符串
  3. Dim ss,i,j
  4. s="bat home home Net home net Bat net"
  5. 'For i=0 To 10
  6. ' s=s & " " & s
  7. 'Next
  8. ss=Split(s," ")
  9. MsgBox "Length: " & Len(s) & vbNewLine & "Count: " & UBound(ss)+1
  10. ReDim mark(UBound(ss))
  11. For i=0 To UBound(ss)-1
  12. If (mark(i)=0) Then
  13. For j=i+1 To UBound(ss)
  14. If (mark(j)=0) Then
  15. If (StrComp(ss(i),ss(j),vbTextCompare)=0) Then
  16. mark(i)=1:mark(j)=-1
  17. End If
  18. End If
  19. Next
  20. End if
  21. Next
  22. For i=0 To UBound(ss)
  23. If (mark(i)=1) Then final=final & ss(i) & " "
  24. Next
  25. If (Len(final)>0) Then final=Left(final,Len(final)-1)
  26. Erase mark
  27. MsgBox final
复制代码

作者: dahual    时间: 2011-5-24 11:34

再贴一个利用Dictionary对象Key唯一性的方法。
这个和楼上的代码,大部分时间都花在Split上了;不过目前也没有好的解决办法。
  1. Sub Cut2
  2. Dim s '源字符串
  3. Dim final '最终字符串
  4. Dim ss,i
  5. Dim dic '字典对象
  6. Set dic=CreateObject("Scripting.Dictionary")
  7. s="bat home home Net home net Bat net"
  8. ' For i=0 To 10
  9. ' s=s & " " & s
  10. ' Next
  11. ss=Split(s," ")
  12. MsgBox "Length: " & Len(s) & vbNewLine & "Count: " & UBound(ss)+1
  13. For i=0 To UBound(ss)
  14. If (dic.Exists(LCase(ss(i)))=False) Then dic.Add LCase(ss(i)),ss(i)
  15. Next
  16. Erase ss
  17. For Each item In dic.Items
  18. final=final & item & " "
  19. Next
  20. Set dic=Nothing
  21. If (Len(final)>0) Then final=Left(final,Len(final)-1)
  22. MsgBox final
  23. End Sub
复制代码

作者: batman    时间: 2011-5-24 17:37

用split+instr就可以解决问题了,当然用key更加规范。。。
作者: batman    时间: 2011-5-25 18:32

vbs就这样没人气。。。
my answer
  1. vbstr = "bat home home Net home net Bat net"
  2. For Each str In Split(vbstr, Chr(32))
  3.   If InStr(LCase(vbout), LCase(str)) = 0 Then vbout = vbout & str & Chr(32)
  4. Next
  5. MsgBox LCase(vbout)
复制代码

作者: batman    时间: 2011-5-25 19:49

给上一段和楼上思路一样的批代码帮助大家理解(没有将大写转为小写):
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=bat home home Net home net Bat net"
  3. set "var=@"
  4. for %%a in (%str%) do if /i "!var:%%a=!" equ "!var!" set "var=!var! %%a"
  5. echo !var:~2!
  6. pause>nul
复制代码

作者: wankoilz    时间: 2011-5-26 13:06

5楼的方法真是好,以前写过去重复字符的vbs,但是比起5楼得方法显得太笨拙了,赞一个!
作者: CrLf    时间: 2011-5-26 19:38

5# batman


这不是bat的思路么...
作者: batman    时间: 2011-5-26 20:10

8# zm900612
看6楼。。。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2