零点起飞学C++之文本处理——string类_第1页
零点起飞学C++之文本处理——string类_第2页
零点起飞学C++之文本处理——string类_第3页
零点起飞学C++之文本处理——string类_第4页
零点起飞学C++之文本处理——string类_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第19章 文本处理string类字符串类(string)是由0个或多个字符组成的有限序列,string类是C+中处理字符串的类。本章将详细讲解C+的字符串string类的使用。学习本章,读者将学到更加强大、灵活的手段来进行信息处理。 19.1 定义字符串C的字符串用char*实现,头文件是。在C+里,它变成了,string前面的c表明是C语言格式的。而C+的字符串头文件是,它是利用模板实现的,跟原先C的实现方法不一样,但要安全的多。要在C+中使用string类,必须包含头文件string。它提供了一个用模板实现的string类。由于string是类,有构造函数和析构函数,因此定义string对

2、象的方法就可以有多种。如果声明没有传入任何参数,可以直接使用string类默认的构造函数,这个函数所做的就是把str初始化为一个空字符串。其格式如下所示。string str;/未传入任何参数如果需要在声明时赋初值,就必须使用带构造函数和析构函数的声明方式。其格式有许多种,分别如下所示。第1种形式如下:string str1(str2) 其中,str2也是string变量。这种定义方式叫做拷贝构造,它将生成str2的复制版本。第2种形式如下:string str1(str2,index,length) 其中,str2也是string变量,index和length是整数。index是取值范围为从

3、0到str2的长度减1,表示位置。length表示要取的字符的个数,范围为从0到str2的长度。如果length为0,则表示不取任何字符。如果length大于str2的长度,则默认取到str2的末尾即可。因此,该方式表示将字符串str2内从位置index开始的length个字符作为字符串的初值,是str2子串的复制品。第3种形式如下:string str(cstr)其中,cstr是C语言风格的字符串,即由“char *”定义的字符串。该方式将cstr字符串作为str的初值。第4种形式如下:string str(cstr,length)其中,cstr同上,length是整数。该方式表示将cstr

4、字符串的前length个字符作为字符串str的初值。第5种形式如下:string str(cstr,index,length)其中,cstr意义同上,index和length是整数。该方式与方式2类似,都是将从index开始的length个字符赋给str作初值。第6种形式如下:string str(num,ch) 其中,num是整数,ch是char型字符。该方式表示生成一个字符串,包含num个ch字符。第7种形式如下:string str1=str2其中,str2是string变量。这种方式与方式1是等效的。第8种形式如下:string str=cstr其中,cstr是C风格的字符串,等效于方

5、式3。说明:本节给出的8种string变量的定义方式中,第3、4、5、6、8等5种方式所用到的变量cstr和ch都可以是常量。cstr可以不是变量,而直接是china、hello等字符串。ch也可以不是变量,而是a、1等直接的字符。【示例19-1】 演示字符串的多种定义方式。分析:该示例给出了12种string变量的定义和初始化方式,其中c_str()方法返回C风格的字符串。19.2 string类的常用方法string类的方法有很多,常用的方法如表19-1所示。表19-1 string类的常用方法方 法 名说 明append增加一个字符串到string变量的末尾assign给string变量

6、赋予一个新的字符串,将覆盖掉原来的值at返回字符串中某个位置处的字符,类似于数组的操作begin返回string变量中第一个元素的迭代器地址c_str将string变量转换为C风格的字符串capacity返回重新分配之前的字符容量clear删除全部字符compare对两个串进行比较copy从索引位置开始复制若干个字符给一个C风格的字符串data该方法将string转换为字符数组返回方 法 名说 明empty该方法测试字符串是否为空end该方法返回指向字符串结尾的迭代器erase该方法删除字符串中从索引位置开始的后继字符find该方法从指定位置开始查找特定的字符串find_first_not_o

7、f该方法从当前串中查找第一个不在指定串中的字符出现的位置find_first_of该方法查找当前串中指定串第一次出现的位置find_last_not_of该方法与find_first_not_of类似,但是从反方向开始搜索find_last_of该方法与find_first_of类似,但是从反方向开始搜索insert该方法从指定位置开始插入字符length该方法返回字符串长度max_size该方法字符串可能的最大大小size该方法返回字符串的长度,与length等效substr该方法取子串replace该方法替换原字符串中的一个子串reserve该方法设置字符串的大小的最小值swap该方法和指

8、定串交换内容resize该方法重新分配空间rfind该方法从指定位置开始从后向前查找某字符串在当前串中的位置注意:C+字符串并不像C风格的字符串那样以0结尾。上述方法中,data()、c_str()和copy()都可以将string转换为C风格的字符串。其中,data()以字符数组的形式返回字符串内容,但并不添加0。c_str()返回一个以0结尾的字符数组。而copy()则把字符串的内容复制或写入已有的c_string或字符数组内。【示例19-2】 演示string类方法的使用方法。分析:该示例展示了string类的使用方法,综合使用了C风格和string型字串格式。19.3 string类的

9、运算在19.2节中列举了string类的几种常见方法,本节将给出一些具体的形式和例子。string类的运算函数很多,其中较常用的有字符串查找、字符串替换、取子字符串、字符串比较等多种,这些运算函数极大地丰富了string类的应用。19.3.1 查找字符串在19.2节中提到string类的查找方法有find、rfind、find_first_of等多种,每一种方法都有多种实现,下面将给出其具体的实现形式。1findfind从pos开始从前向后查找字符c在当前串中的位置。常用的定义格式有如下几种。(1)从pos开始查找字符c在当前字符串中的位置。int find(char c, int pos =

10、 0) const;(2)从pos开始查找字符串s在当前串中的位置。int find(const char *s, int pos = 0) const;(3)从pos开始查找字符串s中前n个字符在当前串中的位置。int find(const char *s, int pos, int n) const;(4)从pos开始查找字符串s在当前串中的位置。int find(const string &s, int pos = 0) const;以上格式中,查找成功时返回所在位置,否则返回string:npos的值。其中,string:npos是系统自动产生的值,代表一个非零随机数。2rfindrf

11、ind从pos开始从后向前查找字符c在当前串中的位置。常用的定义格式有如下几种。(1)从pos开始从后向前查找字符c在当前串中的位置。int rfind(char c, int pos = npos) const;(2)从pos开始从后向前查找字符串s在当前串中的位置。int rfind(const char *s, int pos = npos) const;(3)从pos开始从后向前查找字符串s中前n个字符在当前串中的位置。int rfind(const char *s, int pos, int n = npos) const;(4)从pos开始从后向前查找字符c在当前串中的位置。int

12、 rfind(const string &s,int pos = npos) const;如果成功则返回所在位置,否则返回string:npos的值。3find_first_offind_first_of查找当前串中指定串第一次出现的位置。常用的定义格式有如下几种。(1)从pos开始查找字符c在当前串中第一次出现的位置。int find_first_of(char c, int pos = 0) const;(2)从pos开始查找当前串中指定串第一次出现的位置。int find_first_of(const char *s, int pos = 0) const;(3)从pos开始查找字符串s

13、中前n个字符在当前串中第一次出现的位置。int find_first_of(const char *s, int pos, int n) const;(4)从pos开始查找字符串s在当前串中第一次出现的位置。int find_first_of(const string &s,int pos = 0) const;如果成功则返回所在位置,否则返回string:npos的值。4find_first_not_offind_first_not_of从当前串中查找第一个不在指定串中的字符出现的位置。常用的定义格式有如下几种。(1)从pos开始查找当前串中第一个不是字符c的位置。int find_firs

14、t_not_of(char c, int pos = 0) const;(2)从pos开始查找当前串中第一个不是字符串s的位置。int find_first_not_of(const char *s, int pos = 0) const;(3)从pos开始查找当前串中第一个不是字符串s前n个字符的位置。int find_first_not_of(const char *s, int pos,int n) const;(4)从pos开始查找当前串中第一个不是字符串s的位置。int find_first_not_of(const string &s,int pos = 0) const;如果成功

15、则返回所在位置,否则返回string:npos的值。5find_last_offind_last_of与find_first_of类似,但是从反方向开始搜索。常用的定义格式有如下几种。(1)从pos开始从后向前查找字符c在当前串中第一次出现的位置。int find_last_of(char c, int pos = npos) const;(2)从pos开始从后向前查找当前串中指定串s第一次出现的位置。int find_last_of(const char *s, int pos = npos) const;(3)从pos开始从后向前查找字符串s中前n个字符在当前串中第一次出现的位置。int

16、find_last_of(const char *s, int pos, int n = npos) const;(4)从pos开始从后向前查找字符串s在当前串中第一次出现的位置。int find_last_of(const string &s,int pos = npos) const; 如果成功则返回所在位置,否则返回string:npos的值。6find_last_not_offind_last_not_of与find_first_not_of类似,但是从反方向开始搜索。常用的定义格式有如下几种。(1)从pos开始从后向前查找当前串中第一个不是字符c的位置。int find_last_n

17、ot_of(char c, int pos = npos) const;(2)从pos开始从后向前查找当前串中第一个不是字符串s的位置。int find_last_not_of(const char *s, int pos = npos) const;(3)从pos开始从后向前查找当前串中第一个不是字符串s前n个字符的位置。int find_last_not_of(const char *s, int pos, int n) const;(4)从pos开始从后向前查找当前串中第一个不是字符串s的位置。int find_last_not_of(const string &s,int pos =

18、npos) const;19.3.2 替换字符串string类的替换函数是replace,其实际支持的实现形式及常用的定义格式有如下几种。(1)删除从p0开始的n0个字符,然后在p0处插入串s。string &replace(int p0, int n0,const char *s);(2)删除p0开始的n0个字符,然后在p0处插入字符串s的前n个字符。string &replace(int p0, int n0,const char *s, int n);(3)删除从p0开始的n0个字符,然后在p0处插入串s。string &replace(int p0, int n0,const stri

19、ng &s); (4)删除p0开始的n0个字符,然后在p0处插入串s中从pos开始的n个字符。string &replace(int p0, int n0,const string &s, int pos, int n);(5)删除p0开始的n0个字符,然后在p0处插入n个字符c。string &replace(int p0, int n0,int n, char c);(6)把first0,last0之间的部分替换为字符串s。string &replace(iterator first0, iterator last0,const char *s);(7)把first0,last0之间的部分

20、替换为s的前n个字符。string &replace(iterator first0, iterator last0,const char *s, int n);(8)把first0,last0之间的部分替换为串s。string &replace(iterator first0, iterator last0,const string &s);(9)把first0,last0之间的部分替换为n个字符c。string &replace(iterator first0, iterator last0,int n, char c);(10)把first0,last0之间的部分替换成first,las

21、t之间的字符串。string &replace(iterator first0, iterator last0,const_iterator first, const_iterator last);19.3.3 取子字符串string类的取子串方法使用substr,其形式为:string substr(int pos = 0,int n = npos) const;返回pos开始的n个字符组成的字符串,默认参数值为pos取0,n取串长。【示例19-3】 给出3种取子串的方法。string str(abcdefg);str.substr();/返回串的全部内容str.substr(2);/返回位

22、置2开始到末尾的字符str.substr(1,4);/返回位置1开始的4个字符分析:第1种取子方式没有参数,substr取默认值;第2种取子方式只有一个参数,默认将该参数赋给pos,n取默认值;第3种方式给出了两个参数的值。19.3.4 比较字符串C+字符串支持常见的比较操作符(、=、=、=这些操作符的时候,根据“当前字符特性”将字符按字典顺序进行逐一比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。另一个功能强大的比较函数是成员函数compare()。它支持多参数处理,支持用索引值和长度定位子串来进行比较。它返回一个

23、整数来表示比较结果。如果两个字符串相等,则返回0。如果源串大于目标串,则返回值大于0。如果源串小于目标串,则返回值小于0。该函数的形式有如下3种。(1)比较与字符串s的大小。int compare(const string &s) const;(2)比较当前字符串从pos开始的n个字符组成的字符串与s的大小。int compare(int pos, int n,const string &s)const;(3)比较当前字符串从pos开始的n个字符组成的字符串与s中pos2开始的n2个字符组成的字符串的大小。int compare(int pos, int n,const string &s,i

24、nt pos2,int n2)const;19.3.5 连接字符串string类的连接可以使用两种方式:+运算和append。常用的定义格式有如下几种。(1)把字符串s连接到当前字符串的结尾。string &operator+=(const string &s);(2)把c类型字符串s连接到当前字符串结尾。string &append(const char *s); (3)把c类型字符串s的前n个字符连接到当前字符串结尾。string &append(const char *s,int n);19.3.6 插入字符串string类的插入方法是insert,其形式有如下几种。(1)在p0位置插入字符串s。string &insert(int p0, const char *s);(2)在p0位置插入字符串s的前n个字符。string &insert(int p0, const char *s, int n);(3)在p0位置插入字符串s。string &in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论