8月18日串运算

上传人:sx****84 文档编号:243005736 上传时间:2024-09-13 格式:PPT 页数:16 大小:72.50KB
返回 下载 相关 举报
8月18日串运算_第1页
第1页 / 共16页
8月18日串运算_第2页
第2页 / 共16页
8月18日串运算_第3页
第3页 / 共16页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,串运算,串是由零个或多个字符组成的有限序列。一个串中包含的字符个数称为这个串的长度。长度为零的串称为空串,它不包含任何字符。,在,串运算中充分利用系统,的库函数,1.连接运算函数concat(s,1,,s,2,,s,n,):,其中值参s,1,,s,n,为string类型,函数值为string类型。若连接后的串长大于255,则自动截断超出部分。,2.求子串函数copy(s,i,l):,其中值参s为string类型,i和l为integer类型。函数返回s串中第i个字符开始、长度为l的子串(string类型)。若i大于s的长度,则回送一个空串;若l大于第 i个字符开始的余串长度,则仅回送余串。,3.删子串过程delete(var s,i,l):,其中变量参数s为string类型,值参i、l为ingteger类型。该过程删去s中第i个字符开始的长度为l的子串,并返回剩余串s。若i大于原串s的长度,则不删任何字符;若l大于第i个字符开始的余串长度,则删去余串。,4.插入子串过程insert(s1, var s,i):,变量参数s为string类型,值参s,1,为string类型。该过程将s,1,子串插入空串s的第i个字符位置处,并返回插入后的结果s。若插入后s的串长大于255个字符,则截断超出部分。,1,5.求串长函数length(s):,值参s为string类型。该函数返回s串的实际长度值(integer类型)。,6.搜索子串位置函数pos(s1,s2):,值参s,1,和s,2,为string类型。若s,1,是s,2,的一个子串,则返回s,1,中第1个字符在s,2,串中的位置(integer类型);若s,1,非s,2,的一个子串,则返回0。,7.数值转换为数串过程str(x,var s):,值参x为integer类型或real类型,变量参数s为string类型。该过程将返回数值x对应的数串s。,8.数串转换为数值过程val(s,var v,var c):,值参s为string类型,变量参数v为integer类型或real类型,变量参数c为integer类型。该过程试将s串转换成数值v。若转换成功,则c为0,并返回对应的数值v;否则c为无效字符的序数。,9.字符的大写转换函数upcase(ch):,值参ch为char类型。该函数返回ch字符的大写体(char类型),2,数码排序,设有n个正整数,将他们连接成一排,组成一个最大的多位整数.例如:n=3时,3个整数13,312,343,连成的最大整数为:34331213。又如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。,程序输入:N,N个数,程序输出:连接成的多位数,3,由于连接后的字串长度不变,我们可以利用字符串的大小顺序和十进制的进位关系,对n个数串s进行排序,for i1 to n-1 do 顺序排定s,1,s,n-1,for ji+1 to n do依次s,i,与s,i+1,s,n,比较,if si+sj0)and(si que3) do ii-1;,if i0then insert(que5,s,i)将que5字符插在i位置前,else begin writeln(,Error!,);halt;end;else,7,替换操作,从串首出发,由左而右寻找que3字符的位置。若找不到,失败退出;否则将que5替换所有的que3字符:,errortrue;,for i1 to length(s)do由左而右替换que3字符,if si=que3 then,begin,errorfalse;sique5;,end;then,if error then,若找不到,失败退出,begin,writeln(Error!),;,halt,;,endthen,8,主程序,输入原串s和命令串que;,case que1 of,D,:begin 删除操作;end;,D,I,:begin 插入操作;end;,I,R,:begin 替换操作;end;,R,end;case,输出s;,9,字符近似查找,设有n个单词的字典表(1n100)。计算某单词在字典表中的四种匹配情况(字典表中的单词和待匹配单词的长度上限为255):,i:该单词在字典表中的序号;,Ei:在字典表中仅有一个字符不匹配的单词序号;,Fi:在字典表中多或少一个字符(其余字符匹配)的单词序号;,N:其他情况,当查找时有多个单词符合条件,仅要求第一个单词的序号即可。,输入文件,输入文件名为a.in,文件的格式如下:,n(字典表的单词数),n行,每行一个单词,待匹配单词,10,输出文件,输出文件名a.out,格式如下:,i,Ei,Fi,其中i为字典表中符合条件的单词序号(1in),若字典表中不存在符合条件的单词,则对应的i=0。若上述三种情况不存在,则输出N。,输入输出样例,输入1:,5,abcde,abc,asdfasfd,abcd,aacd,abcd,输出1:,4,E5,F1,输入2:,1,a,b,输出2:,0,E0,F0,N,11,我们将字典表中的单词分成3类:,第1类:单词与待匹配单词多或少一个字符,其余字符匹配;,第2类:单词仅有一个字符与待匹配单词不匹配;,第3类:单词与待匹配单词完全匹配;,设,const,note :array1.3 of string=(F,E,); 匹配情况的标志,var,want:string; 待匹配单词,list:array1.100 of string; 字典表。其中listi为单词i,ans :array1.100 of integer;单词的类别序列。其中,ansi= ,12,1、匹配情况的计算,计算两个等长字串中不同字符的个数,function find(a,b:string):integer;输入两个等长字串a,b,计算和返回不同字符的个数,vari,tot:integer;,begin,tot0;,for i1 to length(a) do if aibi then inc(tot);,findtot;,end; find ,13,判别一个字串是否比另一个字串多一个字符(其余字符匹配),我们不知道长度大1的字串究竟在哪个位置上多出一个字符,无奈,只能将该字串的每一个字符试插在另一个字串的对应位置上。如果插入后使得两串相同,则说明猜想成立。否则猜想不成立。,function check(a,b:string):integer;输入字串a,b。若b能够在a的基础上添加一个字符得到的话,则返回1;否则返回0,vari:integer;,begin,check0;,for i0 to length(a) do begin,acopy(a,1,i)+bi+1+copy(a,i+1,255);在ai后插入bi+1,if a=b 若插入后两串相同,则成功退出,then begin check1;exit;end;then,delete(a,i+1,1); 删去a中的插入字符,end;for,end;check,14,2、计算字典表中的每一类单词,首先,我们依次计算每一个单词的类别序号,在单词,i,与待匹配单词等长的情况下,若两串相同,则单词,i,的类别记为,3,;若两串仅有一个字符不同,则单词,i,的类别记为,2,;,若单词,i,比待匹配单词多或少一个字符(其余字符匹配),则单词,i,的类别记为,1,;否则单词,i,的类别记为,0,;,然后根据,ans,序列在字典表中依次搜索类别,3,类别,1,的单词,输出对应的单词序号。如果在字典表中不存在上述,3,种类别的单词,则输出,N,。,fillchar(ans,sizeof(ans),0),;,单词的类别序列初始化,for i1 to n do begin ,对字典中的每个单词进行分类,if length(listi)=length(want) ,若单词,i,与待匹配单词等长,then begin,kfind(listi,want),;,计算单词,i,与待匹配单词的不同字符个数,if k=0 then,ansi, 3,;,记下类别序号,if k=1 then,ansi, 2,;,end,;,then,15,若单词i比待匹配单词多或少一个字符(其余字符匹配),则单词i的类别记为1;否则单词i的类别记为0,if length(listi)+1=length(want) then ansi check(listi,want);,if length(listi)=length(want)+1 then ansi check(want,listi);,end;for,havefalse; 匹配情况存在的标志初始化,for i3 downto 1 do begin 依次输出每一类别的单词在字典表最先出现的序号,k0;,for j1 to n do if ansj=i then begin kj;break;end;then,havehave or (k0);,writeln(notei,k);,end;for,16,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!