数据结构与算法第三部分字符串课件.ppt
《数据结构与算法第三部分字符串课件.ppt》由会员分享,可在线阅读,更多相关《数据结构与算法第三部分字符串课件.ppt(80页珍藏版)》请在三一办公上搜索。
1、数据结构与算法第三章 字符串,主讲人 张铭http:/,北京大学信息学院 版权所有,转载或翻印必究 Page 2,主要内容,3.1 字符串抽象数据类型3.2 字符串的存储结构和类定义3.3 字符串运算的算法实现3.4 字符串的模式匹配,北京大学信息学院 版权所有,转载或翻印必究 Page 3,3.1字符串抽象数据类型,3.1.1 基本概念3.1.2 String抽象数据类型,北京大学信息学院 版权所有,转载或翻印必究 Page 4,3.1.1 基本概念,字符串,由0个或多个字符的顺序排列所组成的复合数据结构,简称“串”。串的长度:一个字符串所包含的字符个数。空串:长度为零的串,它不包含任何字符
2、内容。,北京大学信息学院 版权所有,转载或翻印必究 Page 5,3.1.1.1字符串常数和变量,字符串常数例如:n字符串变量,北京大学信息学院 版权所有,转载或翻印必究 Page 6,3.1.1.2 字符,字符(char):组成字符串的基本单位。在C和C中单字节(8 bits)采用ASCII码对128个符号(字符集charset)进行编码,北京大学信息学院 版权所有,转载或翻印必究 Page 7,3.1.1.3 字符的编码顺序,为了字符串间比较和运算的便利,字符编码表一般遵循约定俗成的“偏序编码规则”。字符偏序:根据字符的自然含义,某些字符间两两可以比较次序。其实大多数情况下就是字典序中文字
3、符串有些特例,例如“笔划”序,北京大学信息学院 版权所有,转载或翻印必究 Page 8,3.1.1.4 C+标准string,标准字符串:将C+的函数库作为字符串数据类型的方案。例如:char SM;串的结束标记:00是ASCII码中8位BIT全0码,又称为NULL符。,北京大学信息学院 版权所有,转载或翻印必究 Page 9,3.1.1.4 C+标准string(续),1.串长函数 int strlen(char*s);2.串复制 char*strcpy(char*s1,char*s2);3串拼接 char*strcat(char*s1,char*s2);4串比较 int strcmp(ch
4、ar*s1,char*s2);,北京大学信息学院 版权所有,转载或翻印必究 Page 10,3.1.1.4 C+标准string(续),5输入和输出函数6定位函数 char*strchr(char*s,char c);7右定位函数 char*strrchr(char*s,char c);,北京大学信息学院 版权所有,转载或翻印必究 Page 11,3.1.1.4 C+标准string(续),北京大学信息学院 版权所有,转载或翻印必究 Page 12,3.1.2 String抽象数据类型,字符串类(class String):不采用char SM的形式而采用一种动态变长的存储结构。,北京大学信息
5、学院 版权所有,转载或翻印必究 Page 13,3.1.2 String抽象数据类型(续),北京大学信息学院 版权所有,转载或翻印必究 Page 14,北京大学信息学院 版权所有,转载或翻印必究 Page 15,北京大学信息学院 版权所有,转载或翻印必究 Page 16,3.1.2.3 赋值算子、拼接算子和比较算子,赋值算子拼接算子比较算子=!=和=,北京大学信息学院 版权所有,转载或翻印必究 Page 17,3.1.2.4 输入输出算子,输入算子输出算子,北京大学信息学院 版权所有,转载或翻印必究 Page 18,3.1.2.5 处理子串(Substring)的函数,简称“子串函数”提取子串
6、插入子串寻找子串删除子串,北京大学信息学院 版权所有,转载或翻印必究 Page 19,3.1.2.6 字符串中的字符,重载下标算子 char,北京大学信息学院 版权所有,转载或翻印必究 Page 20,3.2 字符串的存储结构和类定义,3.2.1字符串的顺序存储3.2.2字符串类class String的存储结构,北京大学信息学院 版权所有,转载或翻印必究 Page 21,3.2.1字符串的顺序存储,对于串长变化不大的字符串,可以有三种处理方案:(1)用S0作为记录串长的存储单元。缺点:限制了串的最大长度不能超过256。,北京大学信息学院 版权所有,转载或翻印必究 Page 22,3.2.1字
7、符串的顺序存储(续),(2)为存储串的长度,另辟一个存储的地方。缺点:串的最大长度一般是静态给定的,不是动态申请数组空间。,北京大学信息学院 版权所有,转载或翻印必究 Page 23,3.2.1字符串的顺序存储(续),(3)用一个特殊的末尾标记0。例如:C+语言的string函数库(include)采用这一存储结构。,北京大学信息学院 版权所有,转载或翻印必究 Page 24,3.2.2 字符串类class String的存储结构,抽取子串函数 例如:String s1=value-;s2=s1.Substr(2,3);上述语句涉及的存储形式如下页所示。,北京大学信息学院 版权所有,转载或翻印
8、必究 Page 25,3.2.2 字符串类class String的存储结构(续),北京大学信息学院 版权所有,转载或翻印必究 Page 26,3.2.2 字符串类class String的存储结构(续),微软VC的CString类介绍自动的动态存储管理,串的最大长度不超过2GB 容器型不必使用new和delete 使用特点:变量申明CString s6(x,6);/s6=xxxxxxCString city=Philadelphia;/串常数作为初值赋值语句s1=s2=hi there;变量比较 if(s1=s2)方法调用 s1.MakeUpper();内部字符比较 if(s20=h),北京
9、大学信息学院 版权所有,转载或翻印必究 Page 27,3.3 字符串运算的算法实现,1.串长函数 int strlen(char*s);2.串复制 char*strcpy(char*s1,char*s2);3串拼接 char*strcat(char*s1,char*s2);4串比较 int strcmp(char*s1,char*s2);,北京大学信息学院 版权所有,转载或翻印必究 Page 28,3.3.1 C+标准串运算的实现,【算法3-1】字符串的复制char*strcpy(char*d,char*s)/这个程序的毛病是,如果字符串s比字符串d要长,/这个程序没有检查拷贝出界,没有报告
10、错误。/可能会造成d的越界 int i=0;while(si!=0)di=si;i+;di=0;return d;,北京大学信息学院 版权所有,转载或翻印必究 Page 29,3.3.1 C+标准串运算的实现(续),【算法3-2】字符串的比较int strcmp(char*d,char*s)int i=0;while(si!=0,北京大学信息学院 版权所有,转载或翻印必究 Page 30,3.3.1 C+标准串运算的实现(续),i+;if(di=0,北京大学信息学院 版权所有,转载或翻印必究 Page 31,3.3.1 C+标准串运算的实现(续),【算法3-3】求字符串的长度int strle
11、n(char d)int i=0;while(di!=0)i+;return i;,北京大学信息学院 版权所有,转载或翻印必究 Page 32,3.3.1 C+标准串运算的实现(续),【算法3-4】寻找字符char*strchr(char*d,char ch)/按照数组指针d依次寻找字符ch,/如果找到ch,则将指针位置返回,/如果没有找到ch,则为0值。i=0;,北京大学信息学院 版权所有,转载或翻印必究 Page 33,3.3.1 C+标准串运算的实现(续),/循环跳过那些不是ch的字符while(di!=0,北京大学信息学院 版权所有,转载或翻印必究 Page 34,3.3.1 C+标准
12、串运算的实现(续),【算法3-5】反向寻找字符char*strrchr(char*d,char ch)/按照数组指针d,从其尾部反着寻找字符ch,/如果找到ch,则将指针位置返回,/如果没有找到ch,则为0值。i=0;/找串尾 while(di!=0)i+;,北京大学信息学院 版权所有,转载或翻印必究 Page 35,3.3.1 C+标准串运算的实现(续),/循环跳过那些不是ch的字符while(i=0,北京大学信息学院 版权所有,转载或翻印必究 Page 36,3.3.2 String串运算的实现(续),【算法3-7】创建算子(constructor)String:String(char*s
13、)/先要确定新创字符串实际需要的存储空间,s的类/型为(char*),作为新创字符串的初值。确定/s的长度,用标准字符串函数strlen(s)计算长度size=strlen(s);/然后,在动态存储区域开辟一块空间,用于存/储初值s,把结束字符也包括进来str new char size1;,北京大学信息学院 版权所有,转载或翻印必究 Page 37,3.3.2 String串运算的实现(续),/开辟空间不成功时,运行异常,退出assert(str!=0);/用标准字符串函数strcpy,将s完全/复制到指针str所指的存储空间strcpy(str,s);,北京大学信息学院 版权所有,转载或翻
14、印必究 Page 38,3.3.2 String串运算的实现(续),【算法3-8】销毁算子(destructor)String:String()/必须释放动态存储空间delete str;,北京大学信息学院 版权所有,转载或翻印必究 Page 39,3.3.2 String串运算的实现(续),【算法3-9】拼接算子String String:operator+(String,北京大学信息学院 版权所有,转载或翻印必究 Page 40,3.3.2 String串运算的实现(续),/若开辟动态存储空间不成功,则退出assert(temp.str!=0);temp.size=len;/字符串str(
15、以0结尾)存到tempstrcpy(temp.str,str);/再把参数s的str和本实例的str拼接为长串strcat(temp.str,s.str);return temp;,北京大学信息学院 版权所有,转载或翻印必究 Page 41,3.3.2 String串运算的实现(续),【算法3-10】赋值算子String String:operator=(String,北京大学信息学院 版权所有,转载或翻印必究 Page 42,3.3.2 String串运算的实现(续),/若开辟动态存储空间失败,则退出正常运行 assert(str!=0);size=s.size;strcpy(str,s.s
16、tr);/返回本实例,作为String类的一个实例return*this;,北京大学信息学院 版权所有,转载或翻印必究 Page 43,3.3.2 String串运算的实现(续),【算法3-11】抽取子串函数String String:Substr(int index,int count)/取出一个子串返回,自下标index开始,长度为count int i;/本串自下标index开始向右数直到串尾,长度为leftint left=size index;String temp;char*p,*q;/若下标index值太大,超过本串实际串长,则返回空串if(index=size)/注意不是 in
17、dex=size-1 return temp;,北京大学信息学院 版权所有,转载或翻印必究 Page 44,3.3.2 String串运算的实现(续),/若count超过自index以右的实际子串长度,/则把count变小if(count left)count=left;/释放原来的存储空间delete temp.str;/张铭注释:注意此语句!/若开辟动态存储空间失败,则退出temp.str=new char count+1;assert(temp.str!=0);/p的内容是一个指针,/指向目前暂无内容的字符数组的首字符处p=temp.str;,北京大学信息学院 版权所有,转载或翻印必究
18、Page 45,3.3.2 String串运算的实现(续),/q的内容是一个指针,/指向本实例串的str数组的下标index字符q=,北京大学信息学院 版权所有,转载或翻印必究 Page 46,3.3.2 String串运算的实现(续),【算法 3-12】查找字符int String:Find(char c,int start)/在本实例字符串寻找字符c,如果找到,则/将其下标位置作为整数函数值返回,如果/c没有找到,则为负值。参数start是下标,/从start下标开始寻找c的工作,若start为/0,则从头寻找int i=start;assert(i size);,北京大学信息学院 版权所
19、有,转载或翻印必究 Page 47,3.3.2 String串运算的实现(续),/循环跳过那些不是c的字符while(stri!=0,北京大学信息学院 版权所有,转载或翻印必究 Page 48,3.4 字符串的模式匹配,模式匹配(pattern matching)一个目标对象S(字符串)一个模板(pattern)P(字符串)任务:用给定的模板P,在目标字符串S中搜索与模板P全同的一个子串,并求出S中第一个和P全同匹配的子串(简称为“配串”),返回其首字符位置。,北京大学信息学院 版权所有,转载或翻印必究 Page 49,S s0 s1 sisi+1 si+2 si+m-2 si+m-1 sn-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 第三 部分 字符串 课件
链接地址:https://www.31ppt.com/p-5355767.html