-2

我正在制作这个无用的程序只是为了正确地重新编程,并且我正在努力比较两个字符串的准确性。


我基本上有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。

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

*百分比匹配 = 75

返回 75

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

If str1(x) = str2(x) Then

它返回一个错误,“索引超出了数组的范围。” 我理解错误,只是不知道我哪里出错了。

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

提前致谢,

林斯莱普

4

3 回答 3

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 回答
0

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

希望你明白。:)

于 2015-02-23T09:22:21.823 回答
0

If you consider the string

str = "ABCDE";

str.Length is 5. But if you index it with a 0 based index,

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

Now in your

For x = 0 To str1.Length

If you compare with my example, when x is equal to the length of the string, you are checking str[5], which is out of the bound hence throwing the exception.

Change that line to

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)

Cheers!!!

于 2015-02-16T22:44:22.010 回答