字符串的查找与替换汇编实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编程序设计——语言翻译机
(一)实验内容
本次汇编程序设计题目选自2006年百度之星程序设计大赛初赛题目。原题如下:
百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套他们独特的缩率语。他们在平时的交谈,会议,甚至在各中技术文档中都会大量运用。为了让新员工可以更快地适应百度的文化,更好地阅读公司的技术文档,人力资源部决定开发一套专用的翻译系统,把相关文档中的缩率语和专有名词翻译成日常语言。
●输入数据:
输入数据包含三部分
1. 第一行包含一个整数N(N<=10000 ),表示总共有多少个
缩率语的词条。
2. 紧接着有N行的输入,每行包含两个字符串,以空格隔开。
第一个字符串为缩率语(仅包含大写英文字符,长度不超过
10 ),第二个字符串为日常语言(不包含空格,长度不超过
255 )。
3. 从第N+2 开始到输入结束为包含缩略语的相关文档。(总
长度不超过1000000 个字符)
●输出数据:
将缩率语转换成日常语言,其他字符保留原样。
●输入样例:
6
PS(门户搜索部)
NLP(自然语言处理)
PM(产品市场部)
HR(人力资源部)
PMD(产品推广部)
MD(市场发展部)
百度的部门包括PS,PM,HR,PMD,MD等等,其中PS还包括NLP小组。
●输出样例:
百度的部门包括门户搜索部,产品市场部,人力资源部,产品推广部,市场发展部等等,其中门户搜索部还包括自然语言处理小组。
(二)算法流程图
本程序算法流程图如下:
注:
要将缓冲区中字符串末尾回车符替换为$。
rank
strcpy(复制): Array
Strcat(粘贴):
(三)实验结果
(四)源程序
.model small
.586
.data
num db ? ;替换词条个数
buf0 db 5 ;输入词条个数缓存
count0 db ?
word0 db 5 dup(0)
tihuan struc
buf1 db 20 ;结构体,储存数据
count1 db ?
word1 db 20 dup('$')
buf2 db 40
count2 db ?
word2 db 40 dup('$')
tihuan ends
string tihuan 100 dup (<>) ;结构体数组,存储词条
temp tihuan <>
buf3 db 100 ;输入句子缓存
count3 db ?
x db 100 dup('$')
y db 100 dup('$')
note db '此程序实现了字符串的查找替换。例如',0ah,0dh,'输入(每行以回车键结束)',0ah,0dh,'2',0ah,0dh,
'NWPU',0ah,0dh,'The Northwestern Polytechnical
University',0ah,0dh,'Beijing',0ah,0dh,'Xian',0ah,0dh,
'NWPU is one of the best universities in Beijing.',0ah,0dh,'则输出',0ah,0dh,
'The Northwestern Polytechnical University is one of the best universities in Xian.',0ah,0dh, 'Now please enter:$'
note1 db '请输入词条个数:',0ah,0dh,'$'
note2 db '请输入被替换的词条:',0ah,0dh,'$'
note3 db '请输入替换词条:',0ah,0dh,'$'
note4 db '请输入文本:',0ah,0dh,'$'
note5 db '替换结果为:',0ah,0dh,'$'
.code
.startup
mov ax,@data ;数据段段基址
mov es,ax
cr macro ;宏:回车
mov dl,0dh
mov ah,2
int 21h
endm
lf macro ;宏:换行
mov dl,0ah
mov ah,2
int 21h
endm
mov dx,offset note ;输出提示
mov ah,9
int 21h
cr
lf
call input
call rank
mov al,num
and ax,00ffh
mov cx,ax
mov bx,offset string[0].word1
lop:
mov ax,offset x
push ax
push bx
call strstr
cmp ax,0
jz nextword
mov si,ax
mov al,[si+1]
;和下边第三行是为了解决缩略词条字数为1时的BUG!
mov [si],'$'
mov [si+1],al
mov al,[bx-1]
and ax,00ffh
add si,ax
mov ax,offset y
push ax
push si
call strcpy
mov ax,offset x
push ax
mov ax,bx
add ax,22
push ax
call strcat
mov ax,offset x
push ax