C++标准库STLstring类.ppt
第三章内容回顾,类的定义成员成员函数保护数据封装构造函数与类同名析构函数重载构造函数默认参数构造函数对象创建过程,第四章,C+标准库STL中的string类,第4章 String类与字符串流处理,C+标准库中的String类String的特性String的构造函数,求属性函数String的赋值,连接,比较,子串,交换String的查找,替换,插入String到 char*的转换String迭代器,C+标准库中的String类,C+模板类basic_string提供了字符串基本操作。C+定义了别名:string typedef basic_string string string 定义在 头文件中,C+标准库中的String类,String类对象可以调用basic_string的构造函数,复制构造函数,以及其它成员函数,包括:strcmp,strcpy,strcat,strlen等。C与C+中串定义的不同:C中为字符指针char*,是指针.字符串以0结尾,用于标识串结束。C+中string为一个类的别名,实质为类,不以0结尾,长度放于属性length中.它不是指针String的第一个下标为0,最后一个为length-1,第4章 String类与字符串流处理,C+标准库中的String类String的特性String的构造函数,求属性函数String的赋值,连接,比较,子串,交换String的查找,替换,插入String到 char*的转换String迭代器,String 特性,string类的属性,包括:string中字符个数尺寸:size string本次不增加内存,能存放元素的总数 容量:capacity string对象中可以存放string的最大长度 最大长度:max_sizestring类的成员函数,包括:构造函数,求属性,赋值,连接,比较,求子串,交换串,寻找字符,替换字符,插入字符,转换为char*串,串流处理,第4章 String类与字符串流处理,C+标准库中的String类String的特性String的构造函数,求属性函数String的赋值,连接,比较,子串,交换String的查找,替换,插入String到 char*的转换String迭代器,String类的构造函数,String对象的构造:调用构造函数string s1(hello);string s1(8,x);/产生8个x的串 string s1=hello;string s2(s1);/复制构造函数 string s3;/默认构造函数,空串,String类的求属性函数,#include#include using namespace std;int main()string s(“tomato”);cout“capacity:”s.capacity()“n max size:”s.max_size()“n size:”s.size()“n length:”s.length()“n empty:”(s.empty()?“true”:“false”);,运行结果:capacity:31Max_size:4294967293Size:6Length:6Empty:false,第4章 String类与字符串流处理,C+标准库中的String类String的特性String的构造函数,求属性函数String的赋值,连接,比较,子串,交换String的查找,替换,插入String到 char*的转换String迭代器,String的赋值,连接,String s1(“cat”),s2,s3 s2=s1;-s2:“cat”s3.assign(s1);-s3:“cat”s22=p;-s2:“cap”s3.at(0)=p-s3:“pat”运算不做越界检查,越界不报错 at()做越界检查,越界报错 s2=s2+“is good!”-s2:cap is good!s1.append(“is white”)-s1:cat is white s3.append(s2,3,s2.size()-s3:pat is good!,String的比较,String s1(“cat”),s2(“cap”),s3(“cat cap”)if(s1=s2)cout 0)cout s2!”;else if(f s2!,String的比较,String s1(“cat”),s2(“cap”),s3(“cap cat”)int f=pare(0,3,s3,4,3)0:s1的起始下标,3:长度 4:s2的起始下标,3:长度 if(f=0)cout 0)cout”;else if(f 0)cout“”;-=pare(2,5,s2),s1从2下标长度为5的子串和s2整体比,String的子串和交换,String s1(“cat”),s2(“cap”),s3(“cap cat”)s3.substr(5,3);-“cat”求s3从5下标开始长度为3的子串 s1.swap(s2);-s1:“cap”s2:“cat”互换s1和s2的值,第4章 String类与字符串流处理,C+标准库中的String类String的特性String的构造函数,求属性函数String的赋值,连接,比较,子串,交换String的查找,替换,插入String到 char*的转换String迭代器,String的查找,替换,插入,String s1(“cat”),s2(“cap”),s3(“cap cat”)s3.find(“ca”)-在s3中从0下标开始向后查找 首次“ca”出现的起始下标,此刻为0 s3.find(“ca”,3)-在s3中从3下标开始向后查找 首次“ca”出现的起始下标,此刻为4 s3.rfind(“ca”)-在s3中从size()-1下标开始向前查找“ca”出现的起始下标,此刻为4 s3.find_first_of(“spqtw”)在s3中从0下标开始向后 首次出现“spqtw”5个字符中任意一个字 符的起始下标,此刻为2(p 出现),String的查找,替换,插入,String s1(“cat”),s2(“cap”),s3(“cap cat”)s3.find_last_of(“spqtw”)在s3中从0下标开始向后 末次出现“spqtw”5个字符中任意一个字 符的起始下标,此刻为6(t 出现)s3.find_first_not_of(“spqtw”)在s3中从0下标开始向后 首次不出现“spqtw”5个字符中任意一个字 符的起始下标,此刻为0(c 出现)s3.find_last_not_of(“spqtw”)在s3中从0下标开始向后 末次出现“spqtw”5个字符中任意一个字 符的起始下标,此刻为5(a 出现),String的查找,替换,插入,String s1(“cat”),s2(“cap”),s3(“cap cat”)s3.replace(3,1,“,”)在s3中从3下标开始向后长度为1的串换成“,”字符串.此刻s3为“cap,cat”s3.replace(3,4,“xxxx;yyy”,4,2)在s3中从3下标开始向后长度为4的串换成“xxxx;yyy”中从4下标开始长度为2的字符串.此刻s3为“cap;”,String的查找,替换,插入,String s1(“cat”),s2(“cap”),s3(“cap cat”)s3.insert(4,“car”)在s3中4下标开始处插入“car,结果s3为“cap car cat”s3.insert(4,“carpenter”,4,string:npos)在s3中4下标开始处插入“carpenter”从4下标开始到尾部的子串,第4章 String类与字符串流处理,C+标准库中的String类String的特性String的构造函数,求属性函数String的赋值,连接,比较,子串,交换String的查找,替换,插入String到 char*的转换String迭代器,String到 char*的转换,String 是一个类,不需要以 null终止,有其属性length指示其有效元素的多少Char*是一个字符指针,可以指向一个字符串,代表了一个字符串首字符占据的地址.无额外的终止标志,因此必须加null终止 string s(“hello”);const char*str=s.c_str()此时:s:“hello”,str:“hello”,第4章 String类与字符串流处理,C+标准库中的String类String的特性String的构造函数,求属性函数String的赋值,连接,比较,子串,交换String的查找,替换,插入String到 char*的转换String迭代器,String迭代器,String 提供了向前和向后遍历的迭代器迭代器类似于指针迭代器不检查范围 string:const_iterator i1;声明i1为指向string的迭代器,通过它可以读取元素,但不能修改元素 string:iterator i1;声明i1为指向string的迭代器,通过它可以读取元素,也能修改元素,String迭代器,#include#include using namespace std;int main()string s(“testing iterators:”);string:const_iterator i1=s.begin();cout“s=”s“n(using iterator i1)s is:”;while(i1!=s.end()cout*i1;+i1;coutendl;return 0;,I1指向第一个字符,I1指向下一个字符,