如何比较两个字符串的准确性



我正在制作这个无用的程序只是为了恢复正常编程,我正在努力比较两个字符串的准确性。


我基本上有 2 个字符串:(示例(

(im 比较的常量( 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。

匹配百分比 = ((8/12(*100(

*百分比匹配 = 75

返回 75

但是,它不返回这个,在线

If str1(x) = str2(x) Then

它返回错误"索引超出数组边界"。我理解错误,只是不知道我出错的地方。

如果还有我可以提供的信息,我会在看到通知后立即提供:)

提前致谢,

林斯莱普

你需要检查给定字符串的长度,你也不应该超过界限,也不要退出循环,直到检查整个字符串:

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";

斯特。长度为 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)

干杯!!!

我知道

这已经开放了一段时间,但我一直在研究这个问题。您还必须尊重字符串的长度。假设您有两个字符串。 ABCDAEF .AEF 是 ABCD 长度的 75%。ABCD中的每封信价值25%。在 AEF 中有一个字母是正确的,那就是 A。当 A = 25%: 75% * 25% = 0,75 * 0,25 = 0,1875 = 18,75% .字符串 AEF 等于 ABCD 的 18,75%。

希望你理解。:)

最新更新