string的常见用法详解

在C语言中,一般使用字符数组char str[]来存放字符串,但是使用字符数组有时会显得操作麻烦,而且容易因经验不足而产生一些错误。为了使编程者可以更方便地对字符串进行操作, C++在STL中加入了string类型,对字符串常用的需求功能进行了封装,使得操作起来更方便,且不易出错。

需要的头文件:

#include <string> //(注意string.h和string是不一样的头文件)

需要的其他东西:

using namespace  std;

string的定义

定义string的方式跟基本数据类型相同,只需要在string后面跟上变量名即可:

string str;

如果需要初始化,可以直接给string类型的变量进行赋值:

string str="abcd";

string中内容的访问

(1)通过下标访问
一般来说,可以直接像字符数组那样去访问string:
在这里插入图片描述
如果要读入和读出整个字符串,则只能用cin和cout:
在这里插入图片描述
在这里插入图片描述
由上图你可以看到,string的输入的终止读取符也是空格,这和 scanf()对字符数组的读取效果是一样的。

上面的代码对任意的字符串输入,都会输出同样的字符串。
那么,真的没有办法用printf来输出string么? 其实是有的,即用 c_str()将string类型转换为字符数组进行输出,
例如:
在这里插入图片描述
(2)通过迭代器访问
一般仅通过(1)即可满足访问的要求,但是有些函数比如insert()与erase()则要求以迭代器为参数,
因此还是需要学习一下string迭代器的用法。

由于string不像其他的容器那样需要参数,因此可以直接如下定义:

string::iterator it;

这样就得到了迭代器 it ,并可以通过 *it来访问string里的每一位:
在这里插入图片描述
最后指出,string 和 vector一样,支持直接对迭代器进行加减某个数字,如str.begin()+3的写法是可行的。

string常用函数实例解析

(1) operator+=
这是string的加法,可以将两个string直接拼接起来。
在这里插入图片描述
(2) compare operator
两个string类型可以直接使用==、!=、<、<=、>、>=比较大小,比较规则是字典序。
例子:
在这里插入图片描述
(3) length() / size()
length()返回string的长度,即存放的字符数,时间复杂度为O(1)。size()与length()基本相同。
在这里插入图片描述
(4) insert()
string的insert()函数有很多写法,这里给出几个常用的写法,时间复杂度为O(N)。
①insert(pos,string) , 在pos号位置插入字符串string。
在这里插入图片描述
②insert( it , it2 , it3 ), it为原字符串的欲插入位置,it2和 it3 为待插字符串的首部迭代器,用来表示串 [ it2, it3)
将被插在it的位置上。
在这里插入图片描述
(5)erase()
erase()有两种方法: 删除单个元素、删除一个区间内的所有元素。时间复杂度为O(N)
①删除单个元素
str.erase(it) ,用于删除单个元素,it为需要删除元素的迭代器。
在这里插入图片描述
②删除一个区间内的所有元素
删除一个区间内的所有元素有两种方法:
str.erase(first,last),其中first为所需删除区间的起始迭代器,而last则为所需要删除区间的末尾迭代器的下一个地址,
即删除 [ first , last) 内的所有元素。

在这里插入图片描述
str.erase(pos , length) , 其中pos为需要开始删除的起始位置,length为删除的字符个数。
在这里插入图片描述
(6)clear()
clear()用以清空string中的数据,时间复杂度一般为O(1)。
在这里插入图片描述
(7)substr()
substr(pos,len)返回从pos号位开始,长度为len的子串,时间复杂度为O(len)
在这里插入图片描述
(8)string:npos
string:npos是一个常数,其本身的值为-1,但由于是unsigned int类型,因此实际上也可以认为是unsigned int类型的最大值。
string:npos用以作为find函数失配时的返回值。例如在下面的实例中可以认为string::npos等于-1或者4294967295.
在这里插入图片描述
(9)find()
str.find(str2),当str2是str的字串时,返回其中在str中第一次出现的位置:
如果str2不是str的子串,那么返回string::npos。
str.find(str2,pos),从str的pos号位开始匹配str2,返回值与上相同。
时间复杂度为O(nm),其中n和m分别为str和str2的长度。
在这里插入图片描述
(10)replace()
str.replace(pos,len,str2)
把str从pos号位开始、长度为len的子串替换为str2。
str.replace(it1,it2,str2)把str的迭代器[it1,it2)范围内的子串替换为str2。

猜你喜欢

转载自blog.csdn.net/qq_46527915/article/details/115173697