我在Visual Basic中为一些大学作业编写一个Hangman游戏(尽管我讨厌Visual Basic-我更喜欢C ++),而且我有点陷入困境。 当玩家按下屏幕键盘上的字母时,需要检查该字母是否存在该字母,并替换该字符串的蒙版版本中的特定字符(Apple&#的蒙面版本) 39;例如,' *****'。
通过word
字符串替换我文盲的字符,并执行substring
操作以替换maskedWord
中的字符位置。
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
答案 0 :(得分:3)
这是因为只有在count
中找到A
字母时才会增加word
。无论你是否找到任何东西,都需要在每次迭代时递增它。
另外,为了警告您下一个问题 - Str
变量会在每个找到的字母实例上重新初始化,并且您根本不会修改maskedWord
。但也许你根本没有那么远。
除此之外,是的,这是解决任务的一种非常好的方式。也许不是最优的 - 所有这些子串和连接都在内存中创建了大量的中间字符串。但是,既然这个词很小,那就完全可以了。
如果你必须为一个长字符串(我们在这里说兆字节)这样做,你可以先将它转换为characater数组(通过String.ToCharArray
),然后遍历数组并修改必要的元素,最后通过the appropriate constructor将其更改回字符串。
也许这可以简化代码。也许不吧。你的电话。