-2

私はこの役に立たないプログラムを作成して、適切にプログラミングに戻るためだけに、2 つの文字列を正確に比較するのに苦労しています。


私は基本的に2つの文字列を持っています:(例)

(比較する定数) str1 = "abcdefghijkl"

(入力) str2 = "abcdefghjkli"

str2 は "h" まで (および "h" を含む) 正しいです。文字列の何%が正しいか知りたいです。

これは私がこれまでに持っているコードです:

Private Function compareString(str1 As String, str2 As String)
'Compares str2 to str1 and returns a % match
Dim strNumber As Integer
Dim percentMatch As Integer
'Dim array1(16), array2(16) As Char
'array1 = str1.ToCharArray
'array2 = str2.ToCharArray

 For x = 0 To str1.Length
    'If array1(x) = array2(x) Then
    If str1(x) = str2(x) Then
        strNumber += 1
    Else
        Exit For
    End If
 Next
 percentMatch = ((strNumber / (str1.Length - 1)) * 100)
 percentMatch = CInt(CStr(percentMatch.Substring(0,4)))
 Return percentMatch

End Function 2 つのコメント セクションは、ここに来る前に試した別のアプローチです。コードは次のように実行する必要があります

compareString("abcdefghijkl", "abcdefghjkli")

strNum は 8 になります。

一致率 = ((8 / 12)*100)

*一致率 = 75

リターン 75

しかし、それはこれを返さない、行上

If str1(x) = str2(x) Then

「インデックスが配列の範囲外でした」というエラーが返されます。私はエラーを理解していますが、どこが間違っているのかではありません。

私が提供できる情報が他にある場合は、通知が表示されたらすぐに提供します:)

前もって感謝します、

リンスレップ

4

3 に答える 3

0

文字列を考えれば

str = "ABCDE";

str.Length は 5 です。ただし、0 ベースのインデックスでインデックスを付けると、

str[0] = 'A'
...
str[4] = 'E'
'str[5] throws exception (5 = str.Length)

今あなたの

For x = 0 To str1.Length

私の例と比較すると、x が文字列の長さに等しい場合、str[5] をチェックしているため、範囲外であるため、例外がスローされます。

その行を次のように変更します

Dim shorterLength = IIf(str1.Length < str2.Length, str1.Length, str2.Length); 'So that you cannot go beyond the boundary
For x = 0 To (shorterLength - 1)

乾杯!!!

于 2015-02-16T22:44:22.010 に答える
0

指定された文字列の長さを確認する必要があります。また、境界を超えてはならず、文字列全体を確認するまでループを終了しないでください。

Dim x As Integer = 0  
While x < str1.Length AndAlso x < str2.Length
    If str1(x) = str2(x) Then
        strNumber += 1
    End If
    i = i + 1
End While
于 2015-02-16T22:48:06.910 に答える