STL——string类
初始化 string的赋值 string的连接 string的性质描述 遍历 字符指针和string的转化 查找、替换、交换 字符串的拼接 区间删除、 插入 大小写转换 比较 反向排序 字符串与数值类型的转化
初始化
string s1 = "aaa" ;
string s2 ( "bbbb" ) ;
string s3 = s2;
string s4 = ( 10 , "A" ) ;
string的赋值
string & operator= ( const string & s) ;
string & assign ( const char * s) ;
string & assign ( const char * s, int n) ;
string & assign ( const string & s) ;
string & assign ( int n, char c) ;
string & assign ( const string & s, int start, int n) ;
string & assign ( const_iterator first, const_itertor last) ;
string的连接
string & operator+ = ( const string & s) ;
string & append ( const char * s) ;
string & append ( const char * s, int n) ;
string & append ( const string & s) ;
string & append ( const string & s, int pos, int n) ;
string & append ( int n, char c) ;
string & append ( const_iterator first, const_iterator last) ;
string的性质描述
string的特性描述:
int capacity ( ) const ;
int max_size ( ) const ;
int size ( ) const ;
int length ( ) const ;
bool empty ( ) const ;
void resize ( int len, char c) ;
字符串的遍历
string a1= "abcdefg" ;
for ( int i= 0 ; i< a1. length ( ) ; i++ )
{
cout<< a1[ i] << " " ;
}
for ( string: : iterator it= a1. begin ( ) ; it< a1. end ( ) ; it++ )
cout<< * it;
字符指针和string的转化
主要有三种方法可以将str转换为char * 类型,分别是:data ( ) ; c_str ( ) ; copy ( ) ;
1. data ( ) 方法,如:
1 string str = “hello”;
2 const char * p = str. data ( ) ;
3 char * p= ( char * ) str. data ( ) ;
同时有一点需要说明,这里在devc++ 中编译需要添加const ,否则会报错invalid conversion from const char * to char ,这里可以再前面加上const 或者在等号后面给强制转化成char 的类型。
下面解释下该问题,const char 是不能直接赋值到char 的, 这样编译都不能通过, 理由: 假如可以的话, 那么通过char 就可以修改const char 指向的内容了, 这是不允许的。所以char 要另外开辟新的空间,即上面的形式。
2. c_str ( ) 方法,如:
1 string str= “world”;
2 const char p = str. c_str ( ) ;
3. copy ( ) 方法,如:
1 string s;
2 char * p = "hello" ;
3 s = p;
string str ( p) ;
字符串的查找、替换和交换(使用类函数)
⚠️注意:当find等函数寻找目标字符/ 字符串 成功返回所在位置,失败时返回string: : npos的值。
string str4 = "who is the bast booy is very good aaaa!!!" ;
int index = ( int ) str4. find ( "is" , 0 ) ;
cout<< "index:" << index << endl;
int offindex = ( int ) str4. find ( "is" , 0 ) ;
while ( offindex != string: : npos)
{
cout<< "offindex:" << offindex<< endl;
offindex = offindex + 1 ;
offindex = ( int ) str4. find ( "is" , offindex) ;
}
int pos = ( int ) str4. find ( "is" , 0 ) ;
while ( pos != string: : npos)
{
str4. replace ( pos, 3 , "IS" ) ;
pos = ( int ) str4. find ( "is" , pos+ = 1 ) ;
}
string str5 = "aaa bbb ccc " ;
str5. replace ( 4 , 3 , "BBB" ) ;
cout<< str5;
string str_a = "abc" ;
string str_b = "def" ;
string str_c = str_a + str_b;
str_a. swap ( str_b) ;
字符串的拼接
string str_a = "abc" ;
string str_b = "def" ;
string str_c = str_a + str_b;
str_a + = str_b;
str_a. append ( str_c) ;
str_b. push_back ( 'z' ) ;
string字符串的插入和删除
string ar1= "BBBBCCCC" ;
int position = ( int ) ar1. find ( "C" , 0 ) ;
ar1. erase ( position, 3 ) ;
cout<< ar1<< endl;
string ar2 = "aaaaa ddddd eeee" ;
ar2. erase ( ar2. begin ( ) , ar2. end ( ) ) ;
cout<< ar2. length ( ) << endl;
string ar3 = "abcdefghi" ;
string: : iterator it = find ( ar3. begin ( ) , ar3. end ( ) , 'f' ) ;
ar3. erase ( it) ;
cout<< ar3<< endl;
插入字符串
ar3. insert ( 2 , "zzzz" ) ;
cout<< ar3<< endl;
ar3. insert ( 0 , "1234567" , 5 ) ;
cout<< ar3<< endl;
ar3. push_back ( 'a' )
string字符串大写或小写转换
string s= "aaaaaBBBB" ;
transform ( s. begin ( ) , s. end ( ) , s. begin ( ) , : : toupper) ;
cout<< s<< endl;
transform ( s. begin ( ) , s. end ( ) , s. begin ( ) , : : tolower) ;
cout<< s<< endl;
字符串比较
C ++ 字符串支持常见的比较操作符(> , >= , < , <= , == , != ),甚至支持string与C- string的比较( 如 str< ”hello”) 。在使用> , >= , < , <= 这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得 比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。同时,string ( “aaaa”) < string ( aaaaa) 。
string s ( “abcd”) ;
s. compare ( “abcd”) ;
s. compare ( “dcba”) ;
s. compare ( “ab”) ;
s. compare ( s) ;
s. compare ( 0 , 2 , s, 2 , 2 ) ;
s. compare ( 1 , 2 , ”bcx”, 2 ) ;
字符串反向排序
string str3 = "hellow world !" ;
reverse ( str3. begin ( ) , str3. end ( ) ) ;
cout<< str3<< endl;
字符串与数值类型的转化
string str4= "01234" ;
int zhi_1 = atoi ( str4. c_str ( ) ) ;
cout<< zhi_1<< endl;
string str5 = "12345678910" ;
long long int zhi_2 = atol ( str5. c_str ( ) ) ;
cout<< zhi_2<< endl;
string str6 = "66.77" ;
double zhi_3 = atof ( str6. c_str ( ) ) ;
cout<< zhi_3<< endl;
cout<< to_string ( 14.2 ) << endl;
cout<< to_string ( 12301 ) << endl;
cout<< to_string ( 123456789785 ) << endl;
cout<< to_string ( true) << endl;