• 締切済み

同文字列の削除方法

vb6でプログラムを書いているのですが,同文字列がある場合削除し出力するプログラムの書き方がわかりません・・・. 例えば,se a sa a se aa →se a sa aa という様に出力したいです.(一つ一つの文字列の後には入力・出力共に半角スペースがあります.) 宜しくお願いします.

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

文字列で受け渡しって感じなら Function DelSameChr( s as String) As String   dim v as variant, res as String   ' スペースで文字列を分割してループ   for each v in Split(s)     if InStr( res, v ) = 0 then       ' 結果の文字列に含まれない文字列を追加       res = res & v & " "     end if   next   ' 末尾のスペースを除去   DelSameChr = Trim( res ) End Function といった具合です dim ss as String, res as string ss = "se a sa a se aa" res = DelSameChr(ss) といった具合に使います

pamu11
質問者

補足

ご丁寧な返答ありがとうございます. とても参考になります. このプログラムの場合aaのすぐ後にaがきた場合直後のaも消えてしまいました. その点考えたいと思います.

回答No.1

Option Explicit Sub Main() Dim s As String Dim sa() As String s = "se a sa a se aa" '別に文字列をそのままSplit関数に渡しても良い sa = Split(s) '戻り値がObjectらしく、そのままUnique関数に渡せないらしい。なんてこった。 MsgBox (Join(Unique(sa), " ")) End Sub Function Unique(s() As String) As String() Dim result() As String Dim i As Integer Dim j As Integer Dim t As Boolean Dim ub As Integer ReDim Preserve result(0) result(0) = s(0) For i = 1 To UBound(s) t = True For j = 0 To i - 1 If s(i) = s(j) Then t = False End If Next If t = True Then ub = UBound(result) ReDim Preserve result(ub + 1) result(ub + 1) = s(i) End If Next Unique = result 'どうやら配列を渡すときはSetは付けられないようだ。もしかしてDeep Copy? End Function

関連するQ&A