##实战c++中的string系列--string的连接(+= or append or push_back)
string的连接也是经常用到的,string重载了一些运算符:
首先看一看重载+运算符,用于串联两个字符串对象:
源码:
~~~
template<class CharType, class Traits, class Allocator>
basic_string<CharType, Traits, Allocator> operator+(
const basic_string<CharType, Traits, Allocator>& _Left,
const basic_string<CharType, Traits, Allocator>& _Right
);
template<class CharType, class Traits, class Allocator>
basic_string<CharType, Traits, Allocator> operator+(
const basic_string<CharType, Traits, Allocator>& _Left,
const CharType* _Right
);
template<class CharType, class Traits, class Allocator>
basic_string<CharType, Traits, Allocator> operator+(
const basic_string<CharType, Traits, Allocator>& _Left,
const CharType _Right
);
template<class CharType, class Traits, class Allocator>
basic_string<CharType, Traits, Allocator> operator+(
const CharType* _Left,
const basic_string<CharType, Traits, Allocator>& _Right
);
template<class CharType, class Traits, class Allocator>
basic_string<CharType, Traits, Allocator> operator+(
const CharType _Left,
const basic_string<CharType, Traits, Allocator>& _Right
);
template<class CharType, class Traits, class Allocator>
basic_string<CharType, Traits, Allocator>&& operator+(
const basic_string<CharType, Traits, Allocator>& _Left,
const basic_string<CharType, Traits, Allocator>&& _Right
);
template<class CharType, class Traits, class Allocator>
basic_string<CharType, Traits, Allocator>&& operator+(
const basic_string<CharType, Traits, Allocator>&& _Left,
const basic_string<CharType, Traits, Allocator>& _Right
);
template<class CharType, class Traits, class Allocator>
basic_string<CharType, Traits, Allocator>&& operator+(
const basic_string<CharType, Traits, Allocator>&& _Left,
const basic_string<CharType, Traits, Allocator>&& _Right
);
template<class CharType, class Traits, class Allocator>
basic_string<CharType, Traits, Allocator>&& operator+(
const basic_string<CharType, Traits, Allocator>&& _Left,
const CharType *_Right
);
template<class CharType, class Traits, class Allocator>
basic_string<CharType, Traits, Allocator>&& operator+(
const basic_string<CharType, Traits, Allocator>&& _Left,
CharType _Right
);
template<class CharType, class Traits, class Allocator>
basic_string<CharType, Traits, Allocator>&& operator+(
const CharType *_Left,
const basic_string<CharType, Traits, Allocator>&& _Right
);
template<class CharType, class Traits, class Allocator>
basic_string<CharType, Traits, Allocator>&& operator+(
CharType _Left,
const basic_string<CharType, Traits, Allocator>&& _Rig
~~~
所以使用时,注意事项:
~~~
#include<iostream>
#include<string>
int main()
{
std::string my_str = "holiday";
std::string my_str_add = "error" + "error";//错误
std::string my_str_add2 = my_str + "right";
std::string my_str_add3 = my_str + "right" + "right";
std::string my_str_add4 = "right" + my_str;
std::string my_str_add5 = "error" + "error" + my_str;//错误
return 0;
}
~~~
下面开始正题!
**+=**
****将字符追加到字符串****
~~~
basic_string<CharType, Traits, Allocator>& operator+=(
value_type _Ch
);
basic_string<CharType, Traits, Allocator>& operator+=(
const value_type* _Ptr
);
basic_string<CharType, Traits, Allocator>& operator+=(
const basic_string<CharType, Traits, Allocator>& _Right
);
~~~
**append**
****添加字符为字符串的末尾****
~~~
basic_string<CharType, Traits, Allocator>& append(
const value_type* _Ptr
);
basic_string<CharType, Traits, Allocator>& append(
const value_type* _Ptr,
size_type _Count
);
basic_string<CharType, Traits, Allocator>& append(
const basic_string<CharType, Traits, Allocator>& _Str,
size_type _Off,
size_type _Count
);
basic_string<CharType, Traits, Allocator>& append(
const basic_string<CharType, Traits, Allocator>& _Str
);
basic_string<CharType, Traits, Allocator>& append(
size_type _Count,
value_type _Ch
);
template<class InputIterator>
basic_string<CharType, Traits, Allocator>& append(
InputIterator _First,
InputIterator _Last
);
basic_string<CharType, Traits, Allocator>& append(
const_pointer _First,
const_pointer _Last
);
basic_string<CharType, Traits, Allocator>& append(
const_iterator _First,
const_iterator _Last
);
~~~
有多个重载函数,因此多种使用方法:
~~~
string str1a ( "Hello " );
const char *cstr1a = "Out There ";
str1a.append ( cstr1a );
string str1b ( "Hello " );
const char *cstr1b = "Out There ";
str1b.append ( cstr1b , 3 );
string str1c ( "Hello " ), str2c ( "Wide World " );
str1c.append ( str2c , 5 , 5 );
string str1d ( "Hello " ), str2d ( "Wide " ), str3d ( "World " );
str1d.append ( str2d );
str1d += str3d;
string str1e ( "Hello " );
str1e.append ( 4 , '!' );
string str1f ( "Hello " ), str2f ( "Wide World " );
str1f.append ( str2f.begin ( ) + 5 , str2f.end ( ) - 1 );
~~~
**push_back**
****将元素添加到该字符串的末尾****
~~~
void push_back(
value_type _Ch
);
~~~
这里需要注意的是,以下代码是错误的:
~~~
my_str.push_back("123");//错误
my_str.push_back('1');//ok
~~~
- 前言
- string与整型或浮点型互转
- 指定浮点数有效数字并转为string
- string的替换、查找(一些与路径相关的操作)
- string的分割、替换(类似string.split或是explode())
- string的初始化、删除、转大小写(construct erase upper-lower)
- string的遍历(使用下标还是iterator)
- std::string与MFC中CString的转换
- string到LPCWSTR的转换
- std:vector<char> 和std:string相互转换(vector to stringstream)
- CDuiString和string的转换(duilib中的cduistring)
- string的连接(+= or append or push_back)
- 函数返回局部变量string(引用局部string,局部string的.c_str()函数)
- 将string用于switch语句(c++做C#的事儿, switch中break还是return厉害)
- 不要使用memset初始化string(一定别这么干)