- 締切済み
同文字列の削除方法
vb6でプログラムを書いているのですが,同文字列がある場合削除し出力するプログラムの書き方がわかりません・・・. 例えば,se a sa a se aa →se a sa aa という様に出力したいです.(一つ一つの文字列の後には入力・出力共に半角スペースがあります.) 宜しくお願いします.
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
文字列で受け渡しって感じなら 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) といった具合に使います
- himajin100000
- ベストアンサー率54% (1660/3060)
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
補足
ご丁寧な返答ありがとうございます. とても参考になります. このプログラムの場合aaのすぐ後にaがきた場合直後のaも消えてしまいました. その点考えたいと思います.