2017-06-03 82 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

相关问题