2017-06-03 45 views
0

我有2個字符串和一個字母。只更改字符串中的一個字母

selectedWords BYTE "BICYCLE" 
guessWords BYTE "-------" 
inputLetter BYTE 'C' 

基礎上this answers,我寫的代碼誰主持人如果selectedWords有字母C如果是這樣的情況下,他需要改變串guessWords:

guessWords 「--CC--」

但從一些奇怪的原因,我得到所有其他的可能性,只是不正確的一個。關於如何解決這個問題的一些建議。

+0

順便說一句,與hang子手你也可以使用不同的方法,有布爾陣列的字母大小,要記住,哪個字符已經被猜到了。然後,在輸出當前已知的單詞部分時,可以逐字逐句瀏覽「選定單詞」,並根據字母布爾數組的狀態輸出「 - 」或字母本身。所以你根本不需要「猜詞」。在格式化輸出之後,您可以保留多少字母顯示爲'''',這樣您就可以使用它來確定是否有更多字母需要猜測,或者單詞是否完整。 – Ped7g

回答

1

首先,忘記所謂的字符串指令(scas,comps,movs)。其次,你需要一個帶有索引的固定指針(dispkacement),例如[esi+ebx]。你認爲WriteString需要一個以空字符結尾的字符串嗎?

INCLUDE Irvine32.inc 

.DATA 
selectedWords BYTE "BICYCLE" 
guessWords BYTE SIZEOF selectedWords DUP ('-'), 0 ; With null-termination for WriteString 
inputLetter BYTE 'C' 

.CODE 
main PROC 

    mov esi, offset selectedWords  ; Source 
    mov edi, offset guessWords   ; Destination 
    mov ecx, LENGTHOF selectedWords  ; Number of bytes to check 
    mov al, inputLetter     ; Search for that character 
    xor ebx, ebx      ; Index EBX = 0 

    ride_hard_loop: 
    cmp [esi+ebx], al     ; Compare memory/register 
    jne @F        ; Skip next line if no match 
    mov [edi+ebx], al     ; Hang 'em lower 
    @@: 
    inc ebx        ; Increment pointer 
    dec ecx        ; Decrement counter 
    jne ride_hard_loop     ; Jump if ECX != 0 

    mov edx, edi 
    call WriteString     ; Irvine32: Write a null-terminated string pointed to by EDX 
    exit        ; Irvine32: ExitProcess 

main ENDP 

END main 
+0

非常感謝。你解決了我在我的項目中遇到的所有主要問題。當我完成項目時,我會在git上發佈他,並寫下關於這個的文章。所以我希望盡力將我的論文傳達給你..非常感謝你.. :) – SakaSerbia

+1

@SakaSerbia:謝謝,我感到很榮幸。但你不需要那樣做。而是喝一大杯Šljivovica對我的健康。 :-) – rkhb

+0

我在我的項目中獲得了最多的樂趣。萬分感謝。這裏是git上的代碼https://github.com/SakaSerbia/Hangman---Visual-Studio-2015-with-Ivvine – SakaSerbia

相關問題