Vb.net 子字符串以意外的方式工作

Vb.net 子字符串以意外的方式工作,vb.net,string,Vb.net,String,我正在用VisualBasic为一些大学作业编写一个刽子手游戏(虽然我讨厌VisualBasic,但我更喜欢C++),我有点被卡住了。 当播放器在屏幕键盘上按下一个字母时,需要检查该单词是否存在该字母,并替换字符串的屏蔽版本中的特定字符(例如,“Apple”的屏蔽版本将是“*******” 要替换字符,我正在通过word字符串进行反写,并执行子字符串操作以替换maskedWord中的字符位置 Str=maskedWord.Substring(0,count)+CStr(“A”)+maskedW

我正在用VisualBasic为一些大学作业编写一个刽子手游戏(虽然我讨厌VisualBasic,但我更喜欢C++),我有点被卡住了。 当播放器在屏幕键盘上按下一个字母时,需要检查该单词是否存在该字母,并替换字符串的屏蔽版本中的特定字符(例如,“Apple”的屏蔽版本将是“*******”

要替换字符,我正在通过
word
字符串进行反写,并执行
子字符串
操作以替换
maskedWord
中的字符位置

Str=maskedWord.Substring(0,count)+CStr(“A”)+maskedWord.Substring(count+1)
是相当不言自明的;我们将删除字符并用我们想要的字母(在本例中为“A”)替换它。 我已经搜索了一个又一个解决方案,但是除了
Mid
函数之外,我还没有找到任何东西,该函数不能正常工作

我相当肯定我正确地编程了'Str='行,但是从屏幕截图中可以看出,它并没有按照预期的方式工作。单词'DUBITABLY'的字母'A'是字符位置'6',但是'Str'中的'A'位置被置于位置'1'

为什么会发生这种情况,我怎样才能让“Str”以预期的方式格式化? 我已验证“计数”设置是否正确

代码(我添加了“MsgBox”和两行其他代码作为诊断代码):


这是因为只有在
单词
中找到一个字母
a
时,才能增加
计数。无论您是否发现任何东西,您都需要在每次迭代中增加它

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

除此之外,是的,这是一个很好的解决问题的方法。也许不是最理想的-所有这些子字符串和连接都在内存中创建了大量的中间字符串。但是因为这个词很小,所以这是完全可以的

如果必须对长字符串执行此操作(我们这里说的是兆字节),可以首先将其转换为Characatet数组(via),然后遍历数组并修改必要的元素,最后通过将其更改回字符串


也许这也可以简化这里的代码。也许不是。您的呼叫。

这是因为只有在
单词中找到一个字母
a
时,您才增加
计数。无论您是否发现任何东西,您都需要在每次迭代中增加它

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

除此之外,是的,这是一个很好的解决问题的方法。也许不是最理想的-所有这些子字符串和连接都在内存中创建了大量的中间字符串。但是因为这个词很小,所以这是完全可以的

如果必须对长字符串执行此操作(我们这里说的是兆字节),可以首先将其转换为Characatet数组(via),然后遍历数组并修改必要的元素,最后通过将其更改回字符串


也许这也可以简化这里的代码。也许不是。您的呼叫。

这是因为只有在
单词中找到一个字母
a
时,您才增加
计数。无论您是否发现任何东西,您都需要在每次迭代中增加它

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

除此之外,是的,这是一个很好的解决问题的方法。也许不是最理想的-所有这些子字符串和连接都在内存中创建了大量的中间字符串。但是因为这个词很小,所以这是完全可以的

如果必须对长字符串执行此操作(我们这里说的是兆字节),可以首先将其转换为Characatet数组(via),然后遍历数组并修改必要的元素,最后通过将其更改回字符串


也许这也可以简化这里的代码。也许不是。您的呼叫。

这是因为只有在
单词中找到一个字母
a
时,您才增加
计数。无论您是否发现任何东西,您都需要在每次迭代中增加它

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

除此之外,是的,这是一个很好的解决问题的方法。也许不是最理想的-所有这些子字符串和连接都在内存中创建了大量的中间字符串。但是因为这个词很小,所以这是完全可以的

如果必须对长字符串执行此操作(我们这里说的是兆字节),可以首先将其转换为Characatet数组(via),然后遍历数组并修改必要的元素,最后通过将其更改回字符串


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

你真的想为每封信都这样做吗?难道你不能做一个
主功能
并在按下一个按钮时调用它,这样你就没有那么多了吗code@returntrue正如我所说,这不是“最终代码”,一旦我克服了这个小问题,它将得到改进。对落选者:请说明问题出了什么问题
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