我必须写一个程序
我想使用堆栈来完成此任务。所以这是我的逻辑。
从字符串末尾开始,将该字符与要删除的字符进行比较。如果不是角色将其推入堆栈。如果忽略它并继续通过字符串。然后从头开始将一切都放到位。
我应该用一个程序来完成这个。当我踩到一切似乎工作正常,直到我试图离开程序并返回主要。我很确定我的程序中的逻辑是问题所在。现在,当我尝试使用字符串“The”并删除e时,我得到“他”。
TITLE String Manipulation
INCLUDE Irvine32.inc
.data
prompt byte "Please enter a string to manipulate : ",0
prompt2 byte "Please enter a character to remove: ",0
answerMSG byte "The new string is: ",0
string BYTE 51 DUP (0)
char BYTE ?
byteCount dword ?
.code
main PROC
call clrscr
push eax ;perserve the registers
push ecx
push edx
mov edx, OFFSET prompt ;prints the prompt
call writeString
mov edx, OFFSET string ;moves the register to the first location for the string
mov ecx, SIZEOF string ;Sets the max characters
call readString
mov byteCount,eax ;places actual count into a counting register
call crlf
mov edx, OFFSET prompt2 ;prints the prompt
call writeString
mov edx, OFFSET char
mov ecx, 1
call readString
call clrscr
mov ecx, byteCount
mov edx, OFFSET string
call stringMan
mov edx, OFFSET string
call writeString
pop edx
pop ecx
pop eax
main ENDP
;
stringMan PROC USES eax ecx edx
mov eax,0
L1:
movzx edx , string[ecx]
cmp dl, char
jz L2
push edx
inc eax
L2:
mov string[ecx],0
LOOP L1
mov ecx,eax
mov eax,0
L3:
pop edx
mov byte ptr string[eax],dl
inc eax
loop L3
ret
stringMan ENDP
END main
想出来。
答案:
我没有正确处理从控制台获取角色的问题。当ecx = 0时,我也没有处理这种情况。这是字符数组的第一个位置。所以我没有比较正确的字符,也没有在必要时将第一个字符推到数组上。我通过删除
修复了它mov edx, OFFSET char
mov ecx, 1
call readString
并将其替换为
call readChar
mov char,al
然后在L1循环之后添加它。
movzx edx , string[ecx]
cmp dl,char
jz L4
push edx
inc eax
L4:
它现在按设计工作。我只是有一些格式问题需要清理。
答案 0 :(得分:1)
答案:
我没有正确处理从控制台获取角色的问题。当ecx = 0时,我也没有处理这种情况。这是字符数组的第一个位置。所以我没有比较正确的字符,也没有在必要时将第一个字符推到数组上。我通过删除
修复了它mov edx, OFFSET char
mov ecx, 1
call readString
并将其替换为
call readChar
mov char,al
然后在L1循环之后添加它。
movzx edx , string[ecx]
cmp dl,char
jz L4
push edx
inc eax
L4:
它现在按设计工作。我只是有一些格式问题需要清理。