追加/删除字符串后的字符与原始字符串不同

时间:2019-02-22 10:37:24

标签: .net vb.net

我实际上在实现一个带有字符移除功能的字符附加功能。我正在使用带有固定种子的伪随机数生成器。但是,最终的字符串看起来不像初始的字符串。

我检查了我的随机数组在追加函数和非追加函数中是否相同。附加功能与删除功能相同,但相反。

这是我的附加函数:

<html>

<body>
  <button onclick="a()">Click</button>
  <div id="a" class="class1">
    <p>Hello Everyone</p>
  </div>
</body>

</html>

这是我的去除功能:

Sub append(ByRef phrase As String)
        Dim size_phrase As Integer = phrase.Length - 1
        Dim i As Integer
        Dim rdm_array(size_phrase) As Integer
        'Dim result As String
        Dim randVar As Random = New Random(seed_charac)
        For i = 0 To size_phrase
            rdm_array(i) = randVar.Next(1, size_phrase)
        Next

        Dim j As Integer
        randVar = New Random()
        For j = 0 To size_phrase
            Dim rdm_Char As Char = Chr(randVar.Next(42, 123))
            phrase = phrase.Insert(rdm_array(j), rdm_Char)
        Next
    End Sub

这是我的输出:

enter image description here

在传递这些函数前后,我将拥有相同的字符串

1 个答案:

答案 0 :(得分:1)

您的代码将无法正常工作,因为您随机选择了索引,并且不确定如何添加新项目。这样,添加项目时使用的索引在删除项目时可能会有所不同,原因是后来的项目可能会在其之前修改字符串。这就是为什么您得到奇怪结果的原因。

我看到了按照相反的顺序删除它们的去向,但这仅在生成的索引是单调的情况下才有效。如果是这种情况,您可以通过以相反的顺序删除它们来安全地进行操作。因此,为了使函数正常工作,您必须先对rdm_array进行排序,然后再将其用于appendremove字符。由于添加的字符会增加字符串的长度,并且已经选择了索引(基于字符串的长度!),因此我建议使用减少的索引(它会提供更多的随机结果)。

此外,我认为您还存在一些“一举一得”错误的问题。我不是VB管理员(C#更容易阅读;),但您不应从字符串的长度中减去1,而应从0迭代到size - 1

将所有这些因素都考虑进去,最终方法应该是这样的:

Sub append(ByRef phrase As String)
    Dim size_phrase As Integer = phrase.Length
    Dim i As Integer
    Dim rdm_array(size_phrase) As Integer
    Dim randVar As Random = New Random(seed_charac)
    For i = 0 To size_phrase - 1
        rdm_array(i) = randVar.Next(1, size_phrase)
    Next
    Array.Sort(rdm_array)
    Array.Reverse(rdm_array)
    Dim j As Integer
    randVar = New Random()
    For j = 0 To size_phrase - 1
        Dim rdm_Char As Char = Chr(randVar.Next(42, 123))
        phrase = phrase.Insert(rdm_array(j), rdm_Char)
    Next
End Sub

Sub remove(ByRef phrase As String)
    Dim size_phrase As Integer = phrase.Length
    Dim initialSize As Integer = size_phrase / 2
    Dim i As Integer
    Dim randVar As Random = New Random(seed_charac)
    Dim rdm_array(initialSize) As Integer
    For i = 0 To initialSize - 1
        rdm_array(i) = randVar.Next(1, initialSize)
    Next
    Array.Sort(rdm_array)
    Array.Reverse(rdm_array)
    Dim j As Integer
    For j = initialSize - 1 To 0 Step -1
        phrase = phrase.Remove(rdm_array(j), 1)
    Next
End Sub

enter image description here

最后一点,您的示例建议将其用于某种加密模块-如果是的话,请保持加密状态,以确保将几乎零值添加到要加密的字符串中。