子串以意想不到的方式工作

时间:2014-10-06 20:45:10

标签: vb.net string

我在Visual Basic中为一些大学作业编写一个Hangman游戏(尽管我讨厌Visual Basic-我更喜欢C ++),而且我有点陷入困境。 当玩家按下屏幕键盘上的字母时,需要检查该字母是否存在该字母,并替换该字符串的蒙版版本中的特定字符(Apple&#的蒙面版本) 39;例如,' *****'。

通过word字符串替换我文盲的字符,并执行substring操作以替换maskedWord中的字符位置。

enter image description here

Str = maskedWord.Substring(0, count) + CStr("A") + maskedWord.Substring(count + 1)相当不言自明;我们将字符缩小并用我们想要的字母替换(在这种情况下,' A')。 我已经搜索并搜索了解决方案,但除了Mid功能之外我还没有找到任何其他功能,但这些功能无法正常工作。

我非常确定我编写了' Str ='正确排队,但从屏幕截图中可以看出,它并没有像预期的那样工作。 ' DUBITABLY'有一封信' A'一个角色位置' 6'而是' A'在' Str'正在处理位置' 1'。

为什么会这样,我怎么能得到' Str'以预期的方式格式化? 我已经确认了“数”'正确设置。

代码(我添加了' MsgBox'以及其他几行作为诊断):

Private Sub btnA_Click(sender As Object, e As EventArgs) Handles btnA.Click
        btnA.Enabled = False 'Deactivates the button, so the player cannot use it again.
        If (InStr(word, "A")) Then 'If the letter is in the string
            Dim count As Integer = 0
            For Each c As Char In word 'We go over every char in the word..
                If (CStr(c) = "A") Then
                    Dim Str As String = maskedWord
                    'Str.Remove(count, 1).Insert(count, "A")
                    Str = maskedWord.Substring(0, count) + CStr("A") + maskedWord.Substring(count + 1)
                    MsgBox(Str)
                    count += 1
                End If
            Next
        End If
    End Sub

1 个答案:

答案 0 :(得分:3)

这是因为只有在count中找到A字母时才会增加word。无论你是否找到任何东西,都需要在每次迭代时递增它。

另外,为了警告您下一个问题 - Str变量会在每个找到的字母实例上重新初始化,并且您根本不会修改maskedWord。但也许你根本没有那么远。

除此之外,是的,这是解决任务的一种非常好的方式。也许不是最优的 - 所有这些子串和连接都在内存中创建了大量的中间字符串。但是,既然这个词很小,那就完全可以了。

如果你必须为一个长字符串(我们在这里说兆字节)这样做,你可以先将它转换为characater数组(通过String.ToCharArray),然后遍历数组并修改必要的元素,最后通过the appropriate constructor将其更改回字符串。

也许这可以简化代码。也许不吧。你的电话。