2014-10-06 42 views
0

我在Visual Basic中爲一些大學課外作業編寫一個Hang子手遊戲(儘管我討厭Visual Basic-我更喜歡C++),並且我已經讓自己有點卡住了。 當玩家在屏幕鍵盤上按下一個字母時,需要檢查該字是否存在該字母,並替換該字符串的屏蔽版本中的特定字符(屏蔽版本的「Apple」將是'*****', 例如)。子串以意想不到的方式工作

要替換字符我通過word字符串文盲,並執行substring操作來替換maskedWord中的字符位置。

enter image description here

Str = maskedWord.Substring(0, count) + CStr("A") + maskedWord.Substring(count + 1)的是相當不言自明;我們將字符切出並用我們想要的字母替換(在本例中爲'A')。 我已經搜索並找到了解決這個問題的方法,但除了Mid函數沒有找到任何東西外,它無法正常工作。

我很確定我正確地編寫了'Str ='行,但從屏幕截圖中可以看出,它並不按照預期的方式工作。 'DUBITABLY'這個詞的字母'A'是一個字符位置'6',而'Str'中的'A'位置被置於'1'位置。

爲什麼會發生這種情況,我如何才能以預期的方式獲得'Str'格式? 我已驗證'count'設置正確。

的代碼(我加了「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

你真的想爲每個字母做這個嗎?難道你不能做一個'main函數'並在觸摸按鈕時調用它,所以你沒有代碼 – 2014-10-06 20:48:30

+2

@returntrue就像我說的,這不是'最終代碼',它會得到改進一旦我解決了這個小問題。對於這個問題:請說出問題的不對,而不是「做一個跑步者」。 – cybermonkey 2014-10-06 20:50:35

+0

爲什麼要將字符串轉換爲字符串? 'CStr的( 「A」)'?這裏不需要對CStr的調用。另外,在VB中,你應該使用'&'來進行字符串連接。 – 2014-10-07 13:45:14

回答

3

那是因爲你增加count只有當你發現在wordA。無論您是否發現任何東西,您都需要在每次迭代時增加它。

此外,爲了警告您您的下一個問題 - Str變量會在每個找到的字母實例上重新初始化,並且您根本不會修改任何地方的maskedWord。但是,也許你根本沒有那麼遠。

除此之外,是的,這是解決任務的一個非常好的方法。也許不是最優化的 - 所有這些子串和連接都會在內存中創建大量的中間字符串。但既然這個詞很小,這完全沒問題。

如果你必須爲一個長字符串(我們這裏說的是兆字節)做這個,你可以先將它轉換爲characater數組(通過String.ToCharArray),然後遍歷數組並修改必要的元素,最後改變它通過the appropriate constructor返回到一個字符串。

也許可以簡化這裏的代碼。也許不會。你的來電。

+0

是的,我還沒有得到那麼多,正如@return真正的評論,這將是一個單獨的功能,以提高效率。我感到非常愚蠢的做出(明顯的)錯誤 - 感謝您指出我! – cybermonkey 2014-10-06 20:55:16

+1

@cybermonkey - 沒問題!不要忘記將答案標記爲已接受。 :)祝好運與作業的其餘部分!很高興看到有人試圖自己解決它,而不只是在一些互聯網論壇上乞求完整的代碼! :) – 2014-10-06 21:02:53

相關問題