我有一个字符数组
,完全是随机的,除了每个字符最多出现一次。
我还有一个字符串,其中只包含存在于该数组中的字符。我希望这个字符串能够像"111"
变成"112"
或者"aaa"
变成"aab"
那样"向上计数"。
假设字符数组
包含1,2和3
。上面的例子可以正常工作,但当字符串为"333"
(应变成"1111"
)时,我的函数返回一个空或错误的字符串
。
如果我再次调用该函数并提供错误的字符串
,几次后它就会返回正确的值("1111"
)。
为什么会发生这种情况?
这是我的函数:
Public Function getNextString(ByVal currentStr As String, ByVal pattern() As Char) As String
'currentStr is the string which I want to count upwards, pattern() is the array of chars
Dim nextStr As String = ""
Dim currentStrArray() As Char = currentStr.ToCharArray
Dim currenStrPosition As Integer = currentStrArray.Length - 1
Dim finished As Boolean = False
Do Until finished = True
Dim newPosition As Integer = getPositionInArray(currentStrArray(currentStrPosition)) 'this is a custom function, should be self-explaining
If newPosition = Nothing Then Return Nothing
newPosition += 1
Try
currentStrArray(currenStrPosition) = pattern(newPosition)
finished = True
Catch ex As IndexOutOfRangeException
currentStrArray(currentStrPosition) = pattern(0)
currentStrPosition -= 1
End Try
If currentStrPosition < 0 Then
nextStr = pattern(0)
finished = True
End If
Loop
For i As Integer = 0 To currentStrArray.Length - 1
nextStr = nextStr & currentStrArray(i)
Next
Return nextStr
End Function
有什么想法吗?
编辑:
举个例子,我有数组{"1","2","3"}
。我的string
首先是"111"
。我想测试这些strings
的哈希值。在测试完这个字符串后,我需要下一个string
,"112"
。然后是"113"
、"121"
、"122"
等等。当字符串到达"333"
并且字符串不是我要找的那一个时,很明显它不是只有3个字符的字符串(使用该数组可能的所有3个字符组合已经尝试过)。所以我需要从4个字符开始重新开始。这就是为什么"333"
被认为应该变成"1111"
的原因。
希望这可以帮助。
第二次编辑:
我发现错误了。我重新定义了我的数组,因此最后一个索引为空。这使得我的strings
看起来很奇怪。谢谢你们提供的有效解决方案,祝你们度过愉快的一天!
{"a", "b", "c"}
,你应该将"a"视为0,"b"视为1,"c"视为3,并在三进制中计数。 - Zohar Peled"333" + 1 <> "1111"
。请看我的回答-我已经证明了"333" + 1 = "2111"
。 - Enigmativity