字符串的查找与替换汇编实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档