事3.4C++标准 string(续 举例,字符串s The quick brown dog jumps over the lazy 012345678901235678901234567890136789012 寻找字符r,srr;果返回l倒着寻找r, strchr(S,'I; 结果返回2 北京大学信息学院 版权所有,转载或翻印必究 Page 11
北京大学信息学院 ©版权所有,转载或翻印必究 Page 11 3.1.1.4 C++标准string(续)
312 String抽象数据类型 字符串类( class String 不采用 char s[M]的形式 而采用一种动态变长的存储结构。 北京大学信息学院 版权所有,转载或翻印必究 Page 12
北京大学信息学院 ©版权所有,转载或翻印必究 Page 12 3.1.2 String抽象数据类型 ◼ 字符串类(class String): ◼ 不采用char S[M]的形式 ◼ 而采用一种动态变长的存储结构
class String /字符串类 //它的存储结构和实现方法使用了C+标准 string(简称标准串), /为了区别,类 String所派生创建的实例对象,简称本串,或实例串 //在程序首,要# include< string.h>和# include< iostream.h>及 //及# include< stdlib.h>,以及# include< assert.h> //1.字符串的数据表示: /字符串S通常用顺序存放,用数组S[存储,元素的类型为char //字符串为变长,使用变量size记录串的当前长度 //2.使用变量访问字符串: /字符串变量能参与运算,例如S1+S2表示两个字符串首尾拼接在一起 //用数组str]存储字符串,在内部可以用str[i]访问串的第i个字符, /3.字符串类的运算集:请参看下面的成员函数
北京大学信息学院 ©版权所有,转载或翻印必究 Page 13 3.1.2 String抽象数据类型(续) class String //字符串 类 //它的存储结构和实现方法使用了C++标准string(简称标准串), //为了区别,类String所派生创建的实例对象,简称‘本串’,或‘实例串’ //在程序首,要#include <string.h>和#include <iostream.h>及 // 及 #include <stdlib.h>,以及#include <assert.h> { //1.字符串的数据表示: //字符串 S 通常用顺序存放,用数组S[]存储,元素的类型为char //字符串为变长,使用变量size记录串的当前长度 // 2.使用变量访问字符串: //字符串变量能参与运算,例如S1 + S2表示两个字符串首尾拼接在一起 //用数组str[]存储字符串,在内部可以用str[i]访问串的第i个字符, // 3.字符串类的运算集:请参看下面的成员函数
private public char*str;//私有的指针变量,用于指向存储向量str[size+1] int size: //本串的当前实际长度 String(char*s=’’);//创建一个空的字符串 String(char*s);//创建新字符串,并将标准字符串s拷贝为初值 String //销毁本串,从计算机存储空间删去本串 ∥/下面是算子的定义,包括赋值算子=拼接算子十和比较算子<等 String& operator=(char*s);/赋值操作=,标准串s拷贝到本串 String& operator=( String&s);//赋值操作=,串s复制到本串 String operator+(char*s);//拼接算子十,本串拼接标准串s String operator十( Strin&s);//拼接算子十,本串拼接串s friend String operator+ (char *sl, String& s) /友函数作为拼接算子+其返回值是一个实例串,等于标准串str拼接串s
北京大学信息学院 ©版权所有,转载或翻印必究 Page 14 private: public: char *str; //私有的指针变量,用于指向存储向量str[size+1] int size; //本串的当前实际长度 String(char *s = ''); //创建一个空的字符串 String(char *s); // 创建新字符串,并将标准字符串s拷贝为初值 ~String() // 销毁本串,从计算机存储空间删去本串 //下面是算子的定义,包括赋值算子 = 拼接算子 + 和比较算子 < 等 String& operator= (char *s);//赋值操作=,标准串s拷贝到本串 String& operator= (String& s);//赋值操作=,串s复制到本串 String operator+ (char *s);//拼接算子+,本串拼接标准串s String operator+ (String& s);//拼接算子+,本串拼接串s friend String operator+ (char *s1, String& s); //友函数作为拼接算子+ 其返回值是一个实例串,等于标准串str拼接串s
//关系算子,用于比较相等、大、小,例如 int operator<(char*s);/比较大小,本串小于标准串s则返回非0 int operator<( String&s);/比较大小,本串小于串s则返回非0 friend int operator<(char*s1, String&s);//友函数用于比较, //,标准串s1小于串s,则返回非0 /输入输出ˆ算子>>和<<以及读子串等,例如友函数 friend istream& operator>>(istream& istr, String& s) friend ostream& operator<< (osteream& istr, String& s) //‘子串函数:插入子串、寻找子串、提取子串、删除子串等,例如 String Substr( int index, int count);//它们的功能参见下文 //串与字符’函数:按字符定位等,例如 int find( char c, int start);//在本串中寻找字符c,从下标 start开始找, /寻找到c后,返回字符c在本串的下标位置 //其他函数:求串长、判空串、清为空串 int strlen o;//返回本串的当前串长 int IsEmpty(;/判本串为空串? void clear(;/清本串为空串
北京大学信息学院 ©版权所有,转载或翻印必究 Page 15 //‘关系’算子,用于比较相等、大、小,例如 int operator< (char *s);//比较大小,本串小于标准串s则返回非0 int operator< (String& s);//比较大小,本串小于串s则返回非0 friend int operator< (char *s1, String& s); / /友函数用于比较, // ,标准串s1小于串s,则返回非0 //‘输入输出’算子 >>和<< 以及 读子串等,例如友函数 friend istream& operator>> (isteream& istr,String& s); friend ostream& operator<< (osteream& istr,String& s); // ‘子串函数’:插入子串、寻找子串、提取子串、删除子串等,例如 String Substr(int index,int count); //它们的功能参见下文 //‘串与字符’函数:按字符定位等,例如 int Find(char c,int start);//在本串中寻找字符c,从下标start开始找, // 寻找到c后,返回字符c在本串的下标位置 //其他函数:求串长、判空串、清为空串、 int strlen(); //返回本串的当前串长 int IsEmpty(); //判本串为空串? void clear(); //清本串为空串 };