我正在制作这个无用的程序只是为了恢复正常编程,我正在努力比较两个字符串的准确性。
我基本上有 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)
干杯!!!
这已经开放了一段时间,但我一直在研究这个问题。您还必须尊重字符串的长度。假设您有两个字符串。 ABCD
和AEF
.AEF 是 ABCD 长度的 75%。ABCD中的每封信价值25%。在 AEF 中有一个字母是正确的,那就是 A。当 A = 25%: 75% * 25% = 0,75 * 0,25 = 0,1875 = 18,75%
.字符串 AEF 等于 ABCD 的 18,75%。
希望你理解。:)