题目要求:在STR字符串中删除指定字符,要删除的字符通过键盘输入。要求删除一个字符后,后续字符相应前移。
偶现在的想法是,通过键盘输入后,查找,找不到就直接把原先的字符串显示出来
找到的话就执行题目的操作
但是现在不大明白删除怎么弄,还有就是后续字符的前移
请大家多多帮助!
谢谢先~~~~~~~
.model small
.data
prompt DB 0dh,0ah,'Formerly the string is: ',0dh,0ah,'$'
prompt1 DB 0dh,0ah,'Now it is: ',0dh,0ah,'$'
prompt2 db 'Input a letter.',0dh,0ah,'$'
str db 'abcdefghijklmnopqrstuvwxyz','$'
flag db ?
.code
start:
mov ax,@data
mov ds,ax
mov es,ax
mov bx,offset flag-1
mov dx,offset prompt2 ;输出提示
mov ah,9
int 21h
mov ah,1
int 21h ;从键盘接收要删除的字符.接收的字符在al中.
mov dx,offset prompt
mov ah,9
int 21h
mov dx,offset str
mov ah,9
int 21h ;输出提示.
again:
mov di,offset str
dec di
whileequ:
inc di
cmp byte ptr [di],'$' ;字符串结束,退出.
jz exit
cmp byte ptr [di],al ;是不是要删除的字符?
jnz whileequ
mov si,di
dec di ;目的串比源串上前一个字符,准备前移.
cld
mov cx,bx
sub cx,si ;cx=str尾部地址-当前地址,即字符的前移个数.
rep movsb
dec bx ;删除一个字符str尾部地址提前一个字节.
jmp again ;继续从头查找要删除的字符.
exit:
mov dx,offset prompt1
mov ah,9
int 21h
mov dx,offset str ;输出结果.
mov ah,9
int 21h
mov ah,7
int 21h
mov ah,4ch
int 21h
end start
我的程序可能不完全正确,你自己试一下,多想想,一定能够解决的