数据结构与算法第三部分字符串课件.ppt





《数据结构与算法第三部分字符串课件.ppt》由会员分享,可在线阅读,更多相关《数据结构与算法第三部分字符串课件.ppt(80页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构与算法第三部分字符串课件 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望主要内容主要内容n3.1字符串抽象数据类型字符串抽象数据类型n3.2字符串的存储结构和类定义字符串的存储结构和类定义n3.3字符串运算的算法实现字符串运算的算法实现n3.4字符串的模式匹配字符串的模式匹配北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.1字符串抽象数据类型字符串抽象数据类型n3.1.1基本概念基本概念n3.1.2String
2、抽象数据类型抽象数据类型北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.1.1基本概念基本概念n字符串字符串,由,由0个或多个字符的顺个或多个字符的顺序排列所组成的复合数据结构,序排列所组成的复合数据结构,简称简称“串串”。n串的串的长度长度:一个字符串所包含的:一个字符串所包含的字符个数。字符个数。n空串空串:长度为零的串,它不包含:长度为零的串,它不包含任何字符内容。任何字符内容。北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.1.1.1字符串常数和变量字符串常数和变量n字符串常数字符串常数n例如:
3、例如:nn字符串变量字符串变量北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.1.1.2字符字符n字符字符(char):组成字符串的基:组成字符串的基本单位本单位。n在在C和和C中中n单字节(单字节(8bits)n采用采用ASCII码对码对128个符号(字符个符号(字符集集charset)进行编码)进行编码北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.1.1.3字符的编码顺序字符的编码顺序n为了字符串间比较和运算的便利,为了字符串间比较和运算的便利,字符编码表一般遵循约定俗成的字符编码表一般遵循约定俗
4、成的“偏序编码规则偏序编码规则”。n字符偏序字符偏序:根据字符的自然含义,:根据字符的自然含义,某些字符间两两可以比较次序。某些字符间两两可以比较次序。n其实大多数情况下就是字典序其实大多数情况下就是字典序n中文字符串有些特例,例如中文字符串有些特例,例如“笔划笔划”序序北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.1.1.4C+标准标准stringn标准字符串:将标准字符串:将C+的的函数库作为字符串函数库作为字符串数据类型的方案。数据类型的方案。n例如:例如:charSM;n串的结束标记:串的结束标记:0n0是是ASCII码中码中8位位BIT
5、全全0码,码,又称为又称为NULL符。符。北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.1.1.4C+标准标准string(续续)n1.串长函数串长函数intstrlen(char*s);n2.串复制串复制char*strcpy(char*s1,char*s2);n3串拼接串拼接char*strcat(char*s1,char*s2);n4串比较串比较intstrcmp(char*s1,char*s2);北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.1.1.4C+标准标准string(续续)n5输入
6、和输出函数输入和输出函数n6定位函数定位函数char*strchr(char*s,charc);n7右定位函数右定位函数char*strrchr(char*s,charc);北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.1.1.4C+标准标准string(续续)北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.1.2String抽象数据类型抽象数据类型n字符串类(字符串类(classString):):n不采用不采用charSM的形式的形式n而采用一种动态变长的存储结构。而采用一种动态变长的存储结构。北
7、京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.1.2String抽象数据类型抽象数据类型(续续)北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.1.2.3赋值算子、拼接算子赋值算子、拼接算子和比较算子和比较算子n赋值算子赋值算子n拼接算子拼接算子n比较算子比较算子=!=和和=北京大学信息学院北京大学信息学院 版权所有,转载或翻
8、印必究版权所有,转载或翻印必究Page3.1.2.4输入输出算子输入输出算子n输入算子输入算子n输出算子输出算子北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.1.2.5处理子串处理子串(Substring)的函数的函数n简称简称“子串函数子串函数”n提取子串提取子串n插入子串插入子串n寻找子串寻找子串n删除子串删除子串n北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.1.2.6字符串中的字符字符串中的字符n重载下标算子重载下标算子char&operator(intn);n按字符定位下标按字符定位下标i
9、ntFind(charc,intstart);n反向寻找,定位尾部出现的字符反向寻找,定位尾部出现的字符intFindLast(charc);北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.2字符串的存储结构字符串的存储结构和类定义和类定义n3.2.1字符串的顺序存储字符串的顺序存储n3.2.2字符串类字符串类classString的的存储结构存储结构北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.2.1字符串的顺序存储字符串的顺序存储n对于串长变化不大的字符串,可对于串长变化不大的字符串,可以有三种处
10、理方案:以有三种处理方案:(1)用)用S0作为记录串长的存储作为记录串长的存储单元。单元。n缺点:限制了串的最大长度不能缺点:限制了串的最大长度不能超过超过256。北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.2.1字符串的顺序存储字符串的顺序存储(续续)(2)为存储串的长度,另辟一个)为存储串的长度,另辟一个存储的地方。存储的地方。n缺点:串的最大长度一般是静态缺点:串的最大长度一般是静态给定的,不是动态申请数组空间。给定的,不是动态申请数组空间。北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.2.
11、1字符串的顺序存储字符串的顺序存储(续续)(3)用一个特殊的末尾标记)用一个特殊的末尾标记0。n例如:例如:C+语言的语言的string函数库函数库(include)采用)采用这一存储结构。这一存储结构。北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.2.2字符串类字符串类classString的存储结构的存储结构n抽取子串函数抽取子串函数例如:例如:Strings1=value-;s2=s1.Substr(2,3);上述语句涉及的存储形式如下页上述语句涉及的存储形式如下页所示。所示。北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所
12、有,转载或翻印必究Page3.2.2字符串类字符串类classString的存储结构的存储结构(续续)北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.2.2字符串类字符串类classString的存储结构的存储结构(续续)n微软微软VC的的CString类介绍类介绍n自动的动态存储管理,串的最大长度不超过自动的动态存储管理,串的最大长度不超过2GBn容器型容器型n不必使用不必使用new和和deleten使用特点:使用特点:n变量申明变量申明nCStrings6(x,6);/s6=xxxxxxnCStringcity=Philadelphia;/串常
13、数作为初值串常数作为初值n赋值语句赋值语句ns1=s2=hithere;n变量比较变量比较if(s1=s2)n方法调用方法调用s1.MakeUpper();n内部字符比较内部字符比较if(s20=h)北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.3字符串运算的算法实现字符串运算的算法实现n1.串长函数串长函数intstrlen(char*s);n2.串复制串复制char*strcpy(char*s1,char*s2);n3串拼接串拼接char*strcat(char*s1,char*s2);n4串比较串比较intstrcmp(char*s1,ch
14、ar*s2);北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.3.1C+标准串运算的实现标准串运算的实现n【算法【算法3-1】字符串的复制字符串的复制char*strcpy(char*d,char*s)/这个程序的毛病是,如果字符串这个程序的毛病是,如果字符串s比字符串比字符串d要长,要长,/这个程序没有检查拷贝出界,没有报告错误。这个程序没有检查拷贝出界,没有报告错误。/可能会造成可能会造成d的越界的越界inti=0;while(si!=0)di=si;i+;di=0;returnd;北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权
15、所有,转载或翻印必究Page3.3.1C+标准串运算的实现标准串运算的实现(续续)n【算法【算法3-2】字符串的比较字符串的比较intstrcmp(char*d,char*s)inti=0;while(si!=0&di!=0)if(disi)return1;elseif(di=0&di!=ch);/当本串不含字符当本串不含字符ch,则在串尾结束;,则在串尾结束;/当成功寻找到当成功寻找到ch,返回该位置指针,返回该位置指针if(i=size)/注意不是注意不是index=size-1returntemp;北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page
16、3.3.2String串运算的实现串运算的实现(续续)/若若count超过自超过自index以右的实际子串长度,以右的实际子串长度,/则把则把count变小变小if(countleft)count=left;/释放原来的存储空间释放原来的存储空间deletetemp.str;/张铭注释:注意此语句!张铭注释:注意此语句!/若开辟动态存储空间失败,则退出若开辟动态存储空间失败,则退出temp.str=newcharcount+1;assert(temp.str!=0);/p的内容是一个指针,的内容是一个指针,/指向目前暂无内容的字符数组的首字符处指向目前暂无内容的字符数组的首字符处p=temp.
17、str;北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.3.2String串运算的实现串运算的实现(续续)/q的内容是一个指针,的内容是一个指针,/指向本实例串的指向本实例串的str数组的下标数组的下标index字符字符q=&strindex;/用用q指针取出它所指的字符内容后,指针加指针取出它所指的字符内容后,指针加1/用用p该指针所指的字符单元接受拷贝,该指针也加该指针所指的字符单元接受拷贝,该指针也加1for(i=0;icount;i+)*p+=*q+;/循环结束后,让循环结束后,让temp.str的结尾为的结尾为0*p=0;temp.siz
18、e=count;returntemp;北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.3.2String串运算的实现串运算的实现(续续)n【算法【算法3-12】查找字符查找字符intString:Find(charc,intstart)/在本实例字符串寻找字符在本实例字符串寻找字符c,如果找到,则,如果找到,则/将其下标位置作为整数函数值返回,如果将其下标位置作为整数函数值返回,如果/c没有找到,则为负值。参数没有找到,则为负值。参数start是下标,是下标,/从从start下标开始寻找下标开始寻找c的工作的工作,若若start为为/0,则从头寻找
19、,则从头寻找inti=start;assert(isize);北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.3.2String串运算的实现串运算的实现(续续)/循环跳过那些不是循环跳过那些不是c的字符的字符while(stri!=0&stri!=c)i+;/当本串不含字符当本串不含字符c,则寻找到串尾结束,则寻找到串尾结束,/返回返回1表示失败;当成功寻找到表示失败;当成功寻找到c,返回它的,返回它的/下标位置下标位置if(stri=0)/注意:不要搞成注意:不要搞成“=”return-1;elsereturni;北京大学信息学院北京大学信息学院
20、 版权所有,转载或翻印必究版权所有,转载或翻印必究Page3.4字符串的模式匹配字符串的模式匹配n模式匹配模式匹配(patternmatching)n一个目标对象一个目标对象S(字符串)(字符串)n一个模板(一个模板(pattern)P(字符串)(字符串)n任务:用给定的模板任务:用给定的模板P,在目标字符,在目标字符串串S中搜索与模板中搜索与模板P全同的一个子串,全同的一个子串,并求出并求出S中第一个和中第一个和P全同匹配的子全同匹配的子串(简称为串(简称为“配串配串”),返回其首),返回其首字符位置。字符位置。北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必
21、究PageS s0s1sisi+1si+2si+m-2si+m-1sn-1Pp0p1p2pm-2 pm-1为使模式为使模式为使模式为使模式 P P 与目标与目标与目标与目标 S S 匹配,必须满足匹配,必须满足匹配,必须满足匹配,必须满足p0p1p2pm-1=sisi+1si+2si+m-1北京大学信息学院北京大学信息学院 版权所有,转载或翻印必究版权所有,转载或翻印必究Page朴素模式匹配朴素模式匹配S=ababababababbP=abababbXabababbXabababbXabababbXabababbXabababbXabababb 北京大学信息学院北京大学信息学院 版权所有,转载
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 第三 部分 字符串 课件

限制150内