string 常用接口
operator +=
string (1) string& operator+= (const string& str);c-string (2) string& operator+= (const char* s);character (3) string& operator+= (char c);initializer list (4) string& operator+= (initializer_list<char> il);
+=
运算符接受右侧的字符串,并将其内容附加到左侧字符串的末尾。左侧的字符串需要是一个
std::string
对象,而右侧可以是std::string
对象、字符数组、字面量字符串或单个字符。使用
+=
运算符进行字符串连接的操作比使用+
运算符更高效,因为它避免了不必要的临时字符串对象的创建。string (1)
- 运算符重载函数:
string& operator+= (const string& str);
- 说明: 这个重载的
+=
运算符接受一个std::string
对象作为参数,并将其内容附加到当前字符串的末尾。操作完成后,当前字符串对象被更新,并作为引用返回。c-string (2)
- 运算符重载函数:
string& operator+= (const char* s);
- 说明: 这个重载的
+=
运算符接受一个 C 风格字符串(以空字符 '\0' 结尾的字符数组)作为参数,并将其内容附加到当前字符串的末尾。操作完成后,当前字符串对象被更新,并作为引用返回。character (3)
- 运算符重载函数:
string& operator+= (char c);
- 说明: 这个重载的
+=
运算符接受一个字符作为参数,并将这个字符附加到当前字符串的末尾。操作完成后,当前字符串对象被更新,并作为引用返回。initializer list (4)
- 运算符重载函数:
string& operator+= (initializer_list<char> il);
- 说明: 这个重载的
+=
运算符接受一个字符的初始化列表作为参数,并将列表中的所有字符按顺序附加到当前字符串的末尾。操作完成后,当前字符串对象被更新,并作为引用返回。
find
string (1) size_t find (const string& str, size_t pos = 0) const noexcept;c-string (2) size_t find (const char* s, size_t pos = 0) const;buffer (3) size_t find (const char* s, size_t pos, size_type n) const;character (4) size_t find (char c, size_t pos = 0) const noexcept;用于在字符串中搜索特定的子串、C 风格字符串、字符缓冲区或单个字符,并返回首次出现的位置。
string (1)
- 函数原型:
size_t find (const string& str, size_t pos = 0) const noexcept;
- 说明: 在从位置
pos
开始的字符串中搜索str
指定的字符串。- 参数:
str
:要搜索的字符串。pos
:开始搜索的初始位置,默认为 0。c-string (2)
- 函数原型:
size_t find (const char* s, size_t pos = 0) const;
- 说明: 在从位置
pos
开始的字符串中搜索由s
指定的C风格字符串。- 参数:
s
:要搜索的以空字符终止的C风格字符串。pos
:开始搜索的初始位置,默认为 0。buffer (3)
- 函数原型:
size_t find (const char* s, size_t pos, size_type n) const;
- 说明: 在从位置
pos
开始的字符串中,搜索由s
指向的前n
个字符组成的字符缓冲区。- 参数:
s
:指向字符数组的指针。pos
:开始搜索的初始位置。n
:需要搜索的字符数量。character (4)
- 函数原型:
size_t find (char c, size_t pos = 0) const noexcept;
- 说明: 在从位置
pos
开始的字符串中搜索指定的单个字符c
。- 参数:
c
:要搜索的字符。pos
:开始搜索的初始位置,默认为 0。
insert / erase
insert
string (1) string& insert (size_t pos, const string& str);substring (2) string& insert (size_t pos, const string& str, size_t subpos, size_t sublen = npos);c-string (3) string& insert (size_t pos, const char* s);buffer (4) string& insert (size_t pos, const char* s, size_t n);fill (5) string& insert (size_t pos, size_t n, char c); iterator insert (const_iterator p, size_t n, char c);single character (6) iterator insert (const_iterator p, char c);range (7) template <class InputIterator> iterator insert (iterator p, InputIterator first, InputIterator last);initializer list (8) string& insert (const_iterator p, initializer_list<char> il);
string (1)
- 函数原型:
string& insert(size_t pos, const string& str);
- 说明: 在字符串的
pos
位置插入整个str
字符串。substring (2)
- 函数原型:
string& insert(size_t pos, const string& str, size_t subpos, size_t sublen = npos);
- 说明: 在字符串的
pos
位置插入str
字符串的一部分,开始于str
的subpos
位置,并包括最多sublen
个字符。c-string (3)
- 函数原型:
string& insert(size_t pos, const char* s);
- 说明: 在字符串的
pos
位置插入 C 风格的字符串s
。buffer (4)
- 函数原型:
string& insert(size_t pos, const char* s, size_t n);
- 说明: 在字符串的
pos
位置插入 C 风格字符串s
的前n
个字符。fill (5)
- 函数原型:
string& insert(size_t pos, size_t n, char c);
- 说明: 在字符串的
pos
位置插入n
个字符c
。single character (6)
- 函数原型:
iterator insert(const_iterator p, char c);
- 说明: 在由迭代器
p
指定的位置插入单个字符c
。返回值是指向新插入字符的迭代器。range (7)
- 函数原型:
iterator insert(iterator p, InputIterator first, InputIterator last);
- 说明: 在由迭代器
p
指定的位置插入由另外两个迭代器first
和last
指定的范围内的字符序列。initializer list (8)
- 函数原型:
string& insert(const_iterator p, initializer_list<char> il);
- 说明: 在由迭代器
p
指定的位置插入字符的初始化列表il
。erase
sequence (1)
sequence (1) string& erase (size_t pos = 0, size_t len = npos);character (2) iterator erase (iterator p);range (3) iterator erase (iterator first, iterator last);
- 函数签名:
string& erase(size_t pos = 0, size_t len = npos);
- 说明: 此成员函数会删除从索引
pos
开始,长度为len
的一个子串。如果len
是std::string::npos
(如果没有提供,这将是默认值),那么从pos
开始到字符串结尾的所有字符都将被删除。character (2)
- 函数签名:
iterator erase(iterator p);
- 说明:
erase
的这个重载函数可以删除由迭代器p
指向的单个字符。range (3)
- 函数签名:
iterator erase(iterator first, iterator last);
- 说明: 这个重载函数允许从字符串中删除一序列字符,由范围
[first, last)
指定,其中first
是开始迭代器,last
是结束迭代器(last
指向的字符不包含在内)。
operator [ ]
char& operator[] (size_t pos); const char& operator[] (size_t pos) const;1.char& operator[](size_t pos);
- 这是一个非常方便的访问特定位置字符的方法,
pos
是你想访问的字符的位置。你可以通过它来读取或改变字符串中的字符。如果pos
等于字符串的长度,这个函数将返回一个可修改的空字符('\0')。如果pos
大于字符串的长度,这个行为是未定义的,可能会抛出std::out_of_range
异常。2.
const char& operator[](size_t pos) const;
- 这个版本的
operator[]
与上一个几乎完全相同,但它适用于常量字符串,返回一个常量引用。你可以通过它来读取字符串中的字符,但不能改变它们。如果pos
等于字符串的长度,函数返回一个不可修改的空字符('\0')。如果pos
大于字符串的长度,这个行为是未定义的。
iterator
std::string
类型的迭代器是一个双向迭代器,允许你按顺序访问字符串中的字符。通过使用迭代器,你可以遍历字符串、读取或修改它的元素,而不需要直接操作字符串的内部表示。
字符串的迭代器可以通过字符串对象的成员函数 begin()
和 end()
获得,其中:
begin()
返回一个指向字符串第一个字符的迭代器。end()
返回一个指向字符串末尾(即最后一个字符之后的位置)的迭代器。
除此之外,std::string
还提供了 rbegin()
和 rend()
方法来获得反向迭代器(reverse_iterator
),它们分别指向字符串的最后一个字符和第一个字符之前的位置,允许你从字符串的末尾向前遍历。
c_str
const char* c_str() const noexcept;返回一个指向以空字符('\0')结尾的字符数组的指针。这个字符数组的内容与原
std::string
对象的数据完全相同。这个函数通常用于与需要传入 C 风格字符串(
const char*
)作为参数的函数进行接口。保证std::string
与 C 风格字符数组之间的兼容性。特别注意,返回的字符数组是只读的,你不能通过返回的指针来修改原始的
std::string
对象。另外,值得注意的是,当
std::string
的内容被改变(如插入、删除或更新操作)后,之前从c_str()
得到的值可能就不再有效了。
substr
string substr (size_t pos = 0, size_t len = npos) const;用于创建字符串的一个子字符串。
substr()
函数返回一个新的std::string
对象,它包含从原字符串指定位置开始的特定长度的字符。如果pos
是大于原字符串长度的值,将抛出std::out_of_range
异常。
reserve / resize
reserve
void reserve (size_t n = 0);参数
n
表示你预计将要存储在容器中的元素数量。调用reserve()
函数后,容器会分配足够的内存空间来存储至少n
个元素。这样做的目的是为了减少当元素逐个添加到容器中时需要进行的内存重新分配次数。resize
void resize (size_t n); void resize (size_t n, char c);
void resize(size_t n);
这个函数把字符串长度调整至n
个字符。如果n
小于当前字符串长度,那么原字符串将被截断到n
个字符。如果n
大于当前字符串长度,则在原字符串末尾添加足够数量的空字符(\0
)使得总长度达到n
。
void resize(size_t n, char c);
这个函数与上一个函数在功能上基本相同,只是当n
大于当前字符串长度时,新添加的字符不再是空字符,而是参数c
指定的字符。
to_string / stoi
to_string
string to_string (int val); string to_string (long val); string to_string (long long val); string to_string (unsigned val); string to_string (unsigned long val); string to_string (unsigned long long val); string to_string (float val); string to_string (double val); string to_string (long double val);它们可以将数值转换为字符串。
stoi
int stoi (const string& str, size_t* idx = 0, int base = 10); int stoi (const wstring& str, size_t* idx = 0, int base = 10);用于将字符串转换为整数的函数。
str
: 要转换的字符串。idx
: 一个指针,用于存储处理过程中第一个不符合数值字符部分的下标,默认为 nullptr。如果不为 nullptr,转换停止于第一个不是数字符号的字符处,idx
将设置为该位置的下标。base
: 数字的基数,默认为10,表示十进制。可设定为2-36之间的值,用于解析不同进制的数字字符串。如果成功,函数会返回转换后的整数值。如果转换过程中发生错误,比如传入的字符串不是一个有效的数字表示,或者数字超出了
int
的表示范围,那么函数可能抛出一个异常。
reverse
template <class BidirectionalIterator>void reverse (BidirectionalIterator first, BidirectionalIterator last);反转一个序列中的元素顺序。
参数说明:
first
: 序列中要反转的范围的起始迭代器。last
: 序列中要反转的范围之后的一个迭代器(末尾迭代器的下一个位置)。该函数不返回任何值,它直接在传入的序列上操作,将
[first, last)
范围内的元素反转。这个函数需要双向迭代器(BidirectionalIterator),因为它需要能够在序列中向前和向后两个方向上进行迭代。