您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > C/C++资料 > 第4章 C++ 标准库STL string类
1第三章内容回顾类的定义成员成员函数保护数据封装构造函数与类同名析构函数重载构造函数默认参数构造函数对象创建过程2第四章C++标准库STL中的string类3第4章String类与字符串流处理C++标准库中的String类String的特性String的构造函数,求属性函数String的赋值,连接,比较,子串,交换String的查找,替换,插入String到char*的转换String迭代器4C++标准库中的String类C++模板类basic_string提供了字符串基本操作。C++定义了别名:stringtypedefbasic_stringcharstringstring定义在string头文件中5C++标准库中的String类String类对象可以调用basic_string的构造函数,复制构造函数,以及其它成员函数,包括:strcmp,strcpy,strcat,strlen等。C与C++中串定义的不同:C中为字符指针char*,是指针.字符串以‘\0’结尾,用于标识串结束。C++中string为一个类的别名,实质为类,不以‘\0’结尾,长度放于属性length中.它不是指针String的第一个下标为0,最后一个为length-16第4章String类与字符串流处理C++标准库中的String类String的特性String的构造函数,求属性函数String的赋值,连接,比较,子串,交换String的查找,替换,插入String到char*的转换String迭代器7String特性string类的属性,包括:string中字符个数--尺寸:sizestring本次不增加内存,能存放元素的总数--容量:capacitystring对象中可以存放string的最大长度--最大长度:max_sizestring类的成员函数,包括:构造函数,求属性,赋值,连接,比较,求子串,交换串,寻找字符,替换字符,插入字符,转换为char*串,串流处理8第4章String类与字符串流处理C++标准库中的String类String的特性String的构造函数,求属性函数String的赋值,连接,比较,子串,交换String的查找,替换,插入String到char*的转换String迭代器9String类的构造函数String对象的构造:调用构造函数strings1(hello);strings1(8,‘x’);//产生8个x的串strings1=hello;strings2(s1);//复制构造函数strings3;//默认构造函数,空串10String类的求属性函数#includeiostream#includestringusingnamespacestd;intmain(){strings(“tomato”);cout“capacity:”s.capacity()“\nmaxsize:”s.max_size()“\nsize:”s.size()“\nlength:”s.length()“nempty:”(s.empty()?“true”:“false”);}11运行结果:capacity:31Max_size:4294967293Size:6Length:6Empty:false12第4章String类与字符串流处理C++标准库中的String类String的特性String的构造函数,求属性函数String的赋值,连接,比较,子串,交换String的查找,替换,插入String到char*的转换String迭代器13String的赋值,连接Strings1(“cat”),s2,s3s2=s1;----s2:“cat”s3.assign(s1);----s3:“cat”s2[2]=‘p’;----s2:“cap”s3.at(0)=‘p’----s3:“pat”[]运算不做越界检查,越界不报错at()做越界检查,越界报错s2=s2+“isgood!”---s2:capisgood!s1.append(“iswhite”)---s1:catiswhites3.append(s2,3,s2.size())---s3:patisgood!14String的比较Strings1(“cat”),s2(“cap”),s3(“catcap”)if(s1==s2)cout“true”;elsecout“false”’---falseintf=s1.compare(s2);if(f==0)cout“s1==s2!”;elseif(f0)cout“s1s2!”;elseif(f0)cout“s1s2!”;---s1s2!15String的比较Strings1(“cat”),s2(“cap”),s3(“capcat”)intf=s1.compare(0,3,s3,4,3)0:s1的起始下标,3:长度4:s2的起始下标,3:长度if(f==0)cout“==”;elseif(f0)cout“”;elseif(f0)cout“”;---==s1.compare(2,5,s2),s1从2下标长度为5的子串和s2整体比16String的子串和交换Strings1(“cat”),s2(“cap”),s3(“capcat”)s3.substr(5,3);---“cat”求s3从5下标开始长度为3的子串s1.swap(s2);---s1:“cap”s2:“cat”互换s1和s2的值17第4章String类与字符串流处理C++标准库中的String类String的特性String的构造函数,求属性函数String的赋值,连接,比较,子串,交换String的查找,替换,插入String到char*的转换String迭代器18String的查找,替换,插入Strings1(“cat”),s2(“cap”),s3(“capcat”)s3.find(“ca”)---在s3中从0下标开始向后查找首次“ca”出现的起始下标,此刻为0s3.find(“ca”,3)---在s3中从3下标开始向后查找首次“ca”出现的起始下标,此刻为4s3.rfind(“ca”)---在s3中从size()-1下标开始向前查找“ca”出现的起始下标,此刻为4s3.find_first_of(“spqtw”)–在s3中从0下标开始向后首次出现“spqtw”5个字符中任意一个字符的起始下标,此刻为2(‘p’出现)19String的查找,替换,插入Strings1(“cat”),s2(“cap”),s3(“capcat”)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’出现)20String的查找,替换,插入Strings1(“cat”),s2(“cap”),s3(“capcat”)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;;”21String的查找,替换,插入Strings1(“cat”),s2(“cap”),s3(“capcat”)s3.insert(4,“car”)–在s3中4下标开始处插入“car,结果s3为“capcarcat”s3.insert(4,“carpenter”,4,string::npos)–在s3中4下标开始处插入“carpenter”从4下标开始到尾部的子串22第4章String类与字符串流处理C++标准库中的String类String的特性String的构造函数,求属性函数String的赋值,连接,比较,子串,交换String的查找,替换,插入String到char*的转换String迭代器23String到char*的转换String是一个类,不需要以null终止,有其属性length指示其有效元素的多少Char*是一个字符指针,可以指向一个字符串,代表了一个字符串首字符占据的地址.无额外的终止标志,因此必须加null终止strings(“hello”);constchar*str=s.c_str()此时:s:“hello”,str:“hello”24第4章String类与字符串流处理C++标准库中的String类String的特性String的构造函数,求属性函数String的赋值,连接,比较,子串,交换String的查找,替换,插入String到char*的转换String迭代器25String迭代器String提供了向前和向后遍历的迭代器迭代器类似于指针迭代器不检查范围string::const_iteratori1;声明i1为指向string的迭代器,通过它可以读取元素,但不能修改元素string::iteratori1;声明i1为指向string的迭代器,通过它可以读取元素,也能修改元素26String迭代器#includeiostream#includestringusingnamespacestd;intmain(){strings(“testingiterators:”);string::const_iteratori1=s.begin();cout“s=”s“\n(usingiteratori1)sis:”;while(i1!=s.end()){cout*i1;++i1;}coutendl;return0;}I1指向第一个字符I1指向下一个字符
本文标题:第4章 C++ 标准库STL string类
链接地址:https://www.777doc.com/doc-7027557 .html