目录
string的用法详解
1.string的定义
2.string中内容的访问
3.string常用函数解析
前言:
在c语言中,一般用char str[]来存放字符串,但是使用字符数组有时会显得操作麻烦,而且会因为经验不足产生一些错误!
C++在STL中加入了string类型,对字符串的需求功能进行了封装,使得操作起来更方便。
要使用string,需要加入头文件
#include
string str;
如果要初始化,可以直接给string类型进行赋值
example:
string str = “abcd”;
(1)通过下标访问:
一般来说,可以像字符数组那样去访问string,得到单个的字符。
如果想要读入和输出整个字符串,则只能用cin和cout;
(2)通过迭代器访问:
string :: interator it;
这样就得到了迭代器,然后可以用*it来访问其中的每一位!
最后指出string和vector一样,支持直接对迭代器进行加减某个数字,如str.begin()+3的写法是可行的!
(1)operate +=
这是string的加法,可以直接将两个string拼接起来。
str3 = str1 + str2
or
str1 += str2
//在分别做完两个运算时,str1=str3
(2)compare operator
两个string类型可以直接用==,!=,<,<=,>,>=比较大小,比较规则是字典序。
(3)length()/size()
length()返回string的长度,即存放的字符数,时间复杂度为O(1)。size()与length()基本相同!
(4)insert()
有很多种写法,此处只列举出几个常用的写法,时间复杂度为O(N)。
第一种写法:
insert(pos,string);
在pos的位置上,插入string这个字符串:
str2 = "opq";
str.insert(3,str2);//此处str2也可以直接写opq
第二种写法:
insert(it,it2,it3);
it表示原字符串的欲插入位置,it2和it3为待插字符串的首尾迭代器,用来表示串[it2,it3)
str.insert(str.begin()+3,str2.begin(),str2,end());
(5)erase()
erase()有两种用法:删除单个元素,删除一个区间内的所有元素。时间复杂度均为O(N)
1.删除单个元素
str.erase(str.begin()+3);
2.删除一个区间的元素
又分有两种做法
第一种:
str.erase(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::nops泳衣作为find函数失配时的返回值。
(9)find()
str.find(str2),当str2是str的子串时,返回其在str中第一次出现的位置:如果str2不是string的字串,那么返回string::npos;
str.find(str2,pos);
从str的pos号位开始匹配str2,返回值与上次相同。
时间复杂度为O(mn),其中n和m分别为str和str2的长度。
(10)replace()
有两种使用方法:
第一种:
str.replace(it1,it2,str2);
从[it1,it2)的字符换成str2
第二种:
str.replace(pos,len,str2);
从pos位置开始用str2将长度为len的字符换掉。