一、string简介
# include <string>
using namespace std;
二、string的定义
定义string和基本数据类型相同,只需要在string后面跟上变量名 可以直接通过给string类型变量赋值的方式实现初始化
string str;
string str = "abc" ;
三、string中内容的访问
通过下标访问,可以像字符数组那样去访问string 通过迭代器访问,string和vector一样,支持直接对迭代器进行加减某个数字,如str.begin()+1 如果要输入或输出整个string,只能使用cin和cout
# include <stdio.h>
# include <string>
using namespace std;
int main ( ) {
string str = "abcd" ;
for ( int i = 0 ; i < str. length ( ) ; i++ ) {
printf ( "%c" , str[ i] ) ;
}
for ( string:: iterstor it = str. begin ( ) ; it != str. end ( ) ; it++ ; ) {
printf ( "%c" , * it) ;
}
return 0 ;
}
四、string常用函数
operator +和operator +=:将两个string直接拼起来
string str1 = "abc" ;
string str2 = "ab" ;
str1 + str2 ;
str1 += str2;
compare operator:两个string类型可以直接使用==、!=、<=、>=、<、>比较大小,比较规则是字典序
string str1 = "aa" , str2 = "aa" , str3 = "abc" , str4 = "dc"
if ( str1 == str2) printf ( "Yes!" ) ;
if ( str1 < str2) printf ( "Yes!" ) ;
if ( str4 >= str3) printf ( "Yes!" ) ;
length()和size()均返回string的长度,即存放的字符数,时间复杂度为O(1) insert():在指定位置插入字符,时间复杂度O(n)
insert(pos, string),在pos号位置插入字符串string insert(it, it2, it3),it为原字符串欲插入的位置,it2和it3为待插入字符串的首尾迭代器,用来表示串[it2, it3)将被插在it的位置上。
string str = "abcd" , str2 = "xyz" ;
str. insert ( 2 , str2) ;
string str = "abcd" , str2 = "xyz" ;
str. insert ( str. begin ( ) + 2 , str2. begin ( ) , str2. end ( ) ) ;
erase():删除元素,时间复杂度O(n)
删除单个元素:str.erase(it)用于删除单个元素,it为待删除元素的迭代器 删除一个区间内的所有元素:str.erase(first, last),其中first为需要删除区间的起始迭代器,last为需要删除区间的末尾迭代器的下一个地址,即删除[first, last) 删除从某个位置开始的len个字符:str.erase(pos, length),其中pos为需要开始删除的起始位置,length为删除的字符个数。
string str = "abcdefgh" ;
str. erase ( str. begin ( ) + 2 ) ;
str. erase ( str. begin ( ) + 2 , str. end ( ) - 1 ) ;
str. erase ( 1 , 2 ) ;
clear():清空string中的数据,时间复杂度O(1) substr(pos, len):返回从pos号位开始、长度为len的子串,时间复杂度为O(len)
string str = "Hello world" ;
str. substr ( 0 , 5 ) ;
find():查找子串
str.find(str2),当str2是str的子串时,返回其在str中第一次出现的位置;如果str2不是str的子串,那么返回string::npos str.find(str2, pos),从str的pos号位开始匹配str2。 时间复杂度为O(nm),其中的n和m分别为str和str2的长度 string::npos是一个常数,其本身的值为-1,但由于是unsigned_int类型,实际上也可以认为是unsigned_int的最大值。string::npos用以作为find函数失败时的返回值,可以认为其值为-1或4294967295
# include <string>
# include <iostream>
using namespace std;
int main ( ) {
string str = "Hello world" ;
string str2 = "Hello" ;
string str3 = "Hi" ;
if ( str. find ( str2) != string:: npos)
cout<< str. find ( str2) << endl;
if ( str. find ( str2, 3 ) != string:: npos)
cout<< str. find ( str2, 3 ) << endl;
if ( str. find ( str3) != string:: npos)
cout<< str. find ( str3) << endl;
else
cout<< "No" < endl;
return 0 ;
}
replace()
str.replace(pos, len, str2)把str从pos号位开始、长度为len的子串替换为str2 str.replace(it1, it2, str2)把str的迭代器[it1, it2)范围的子串替换为str2 时间复杂度O(str.length())
# include <iostream>
# include <string>
using namespace std;
int main ( ) {
string str = "Life will be fine" ;
string str2 = "will not" ;
string str3 = "bad" ;
cout<< str. replace ( 5 , 4 , str2) << endl;
cout<< str. replace ( str. begin ( ) + , str. end ( ) , str3) << endl;
return 0 ;
}