【发布时间】:2016-11-11 19:24:45
【问题描述】:
从汇编考试中得到一些问题。它是这样的,给定字符串:
str db " hello world hello world #"
# 符号表示字符串的结尾。操作后的字符串应该是这样的:
"hello world hello world#"
任何去除多余空白的算法或建议将不胜感激。
我试过这段代码:
data segment
str db " hello world hello world #" data ends
start:
mov si,offset str
mov di,0
while:
cmp [si],'#'
jne loopwhile
jmp whileT
loopwhile:
inc di
inc si
jmp while
whileT:
mov si,0
while2:
cmp si,di
jae finish
cmp str[si],32
je check2
inc si
jmp while2
check2:
cmp str[si+1],32
je inner
inc si
jmp while2
inner:
mov bx,si
inc bx
innerW:
cmp bx,di
jae finishInner
mov al,str[bx+1]
mov str[bx],al
inc bx
jmp innerW
finishInner:
dec di
jmp while2
finish:
mov ax,4Ch
int 21h
code ends
但我仍然在字符串的开头得到一个额外的空格。
【问题讨论】:
-
为什么输出应该在第一个
world和第二个hello之间包含一个空格,但在第一个hello之前或者在world和#之间没有空格?我发现该计划的要求不清楚。 -
对不起,如果不清楚,它会删除所有额外的空格,换句话说,输出字符串应该是这样的:“hello world hello world#”
-
好吧,您的代码设计为总是留下一个空格。显然你想删除某些地方的所有空格(在字符串的开头/结尾?),所以你必须调整你的代码来处理它。
-
我试过这个解决方案stackoverflow.com/a/38532219/6389176....
-
就像我说的,该算法总是留下一个空格。如果您有不同的要求,那么您将不得不提出不同的算法。