注册 登录
编程论坛 汇编论坛

[求助]字符串中删除指定字符

youyou 发布于 2006-05-11 09:37, 946 次点击

题目要求:在STR字符串中删除指定字符,要删除的字符通过键盘输入。要求删除一个字符后,后续字符相应前移。

偶现在的想法是,通过键盘输入后,查找,找不到就直接把原先的字符串显示出来
找到的话就执行题目的操作
但是现在不大明白删除怎么弄,还有就是后续字符的前移

请大家多多帮助!
谢谢先~~~~~~~

4 回复
#2
youyou2006-05-11 12:55

为虾米都米人来帮帮偶呢?
#3
公子吕2006-05-11 15:55

.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

我的程序可能不完全正确,你自己试一下,多想想,一定能够解决的

#4
–★–2006-05-11 17:20
删除就是靠后半个串往前“挪1格”实现的。
#5
youyou2006-05-13 17:02

谢谢楼上两位!

1