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