322字符串类 class string 321字符串的顺序存储 的存储结构(续) 用S[]作为记录串长的存储单元 微vc++的 CString类介绍 缺点:串的最大长度不能超过256 管理,串的最大长度不超过2GB ■另辟一个存储的地方存储串的长度 缺点:串的最大长度静态给定 使用特点: 变量申明 用一个特殊的末尾标记0 例如:C++语言的stri ring city=" Philadelphia";//串常敷作为初值 clude <string. h>) 2="hi there" 变量比较i(s1==s2) 方法调用 s1. MakeUpper(; 大卿血端张_·权,成 3字符串运算的算法实现 ■1.串长函数 int strcmp_1(char *d, char *s)t int strlen(char *s) for(int i=O; d[i]==s[i];++i)t ■2.串复制 f(d[i]==o&&s[i]==Y0) char *strcpy (char *s1, char*s2) return0;//两个字符串相等 3.串拼接 char *strcat(char *s1, char *s2) //不等比较第一个不同的字符 4.串比较 return(d[i-s[iD/abs(d[il-s[i]) nt strcmp(char *s1, char *s2); 大带_息 张写 积新有,神 张所有,赖 3.3字符串运算的算法实现 34字符串的模式匹配 ■331C++标准串运算的实现 ■模式匹配( pattern matching) ■332 String串运算的实现 个目标对象S(字符串) 一个模板( pattern)P(字符 任务:求出s中第一个与P全同 匹配的子串(简称为“配串”) 返回其首字符位置 北底大 张储帖写 真大带健意张写c所有,邮必究 e4 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 19 back next 3.2.1字符串的顺序存储 用S[0]作为记录串长的存储单元 缺点:串的最大长度不能超过256 另辟一个存储的地方存储串的长度 缺点:串的最大长度静态给定 用一个特殊的末尾标记'\0' 例如:C++语言的string函数库(# include <string.h>)采用这一存储 结构 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 20 back next 3.2.2 字符串类class String 的存储结构(续) 微软VC++的CString类介绍 自动的动态存储管理,串的最大长度不超过2GB 容器型 不必使用new和delete 使用特点: 变量申明 CString s6( 'x', 6 ); // s6 = "xxxxxx" CString city = "Philadelphia"; // 串常数作为初值 赋值语句 s1 = s2 = "hi there"; 变量比较 if( s1 == s2 ) 方法调用 s1.MakeUpper(); 内部字符比较 if( s2[0] == 'h' ) 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 21 back next 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 22 back next int strcmp_1(char *d, char *s) { for (int i=0;d[i]==s[i];++i ) { if(d[i]=='\0' && s[i]=='\0') return 0;//两个字符串相等 } //不等,比较第一个不同的字符 return (d[i]-s[i])/abs(d[i]-s[i]); } 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 23 back next 3.3 字符串运算的算法实现 3.3.1 C++标准串运算的实现 3.3.2 String串运算的实现 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 24 back next 3.4 字符串的模式匹配 模式匹配(pattern matching) 一个目标对象S(字符串) 一个模板(pattern)P(字符 串) 任务:求出S中第一个与P全同 匹配的子串(简称为“配串”), 返回其首字符位置