Как сравнить две строки для точности

Я делаю эту бесполезную программу только для того, чтобы вернуться к программированию должным образом, и я пытаюсь сравнить две строки для точности.


У меня в основном 2 строки: (пример)

(Константа, которую я сравниваю с) str1 = "abcdefghijkl"

(Вход) str2 = "abcdefghjkli"

Str2 верен с точностью до (включая) "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

Конечная функция Два прокомментированных раздела - это другой подход, который я попробовал до того, как пришел сюда. Код должен работать следующим образом

compareString ("abcdefghijkl", "abcdefghjkli")

strNum доберется до 8.

centMatch = ((8/12) * 100)

*centMatch = 75

Возврат 75

Но это не вернуть, На линии

If str1(x) = str2(x) Then

он возвращает ошибку: "Индекс был за пределами массива". Я понимаю ошибку, только не там, где я иду неправильно.

Если есть больше информации, которую я могу дать, я сделаю это, как только увижу уведомление:)

Заранее спасибо,

Rinslep

3 ответа

Я знаю, что это было открыто некоторое время, но я немного изучил это. Вы должны уважать длину строк тоже. Скажем, у вас есть две строки. ABCD а также AEF, AEF составляет 75% от длины ABCD. Каждое письмо в ABCD стоит 25%. И есть одна буква, которая является правильной в AEF, и это А. И как А = 25%: 75% * 25% = 0,75 * 0,25 = 0,1875 = 18,75%, Строка AEF на 18,75% равна ABCD.

Надеюсь, вы поняли.:)

Вам нужно проверить длину заданных строк, также вы не должны выходить за границы, а также не выходить из цикла до проверки всей строки:

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

Если вы считаете строку

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)

Ура!!!

Другие вопросы по тегам