std::string replace() 方法
- 自 C++20 起
- 自 C++17 起
- 自 C++14 起
- 自 C++11 起
- 直到 C++11
// (1) Non const version only
constexpr basic_string& replace( size_type pos, size_type count,
const basic_string& str );
// (1) Non const version only
constexpr basic_string& replace( const_iterator first, const_iterator last,
const basic_string& str );
// (2) Non const version only
constexpr basic_string& replace( size_type pos, size_type count,
const basic_string& str,
size_type pos2, size_type count2 = npos );
// (3) Non const version only
template< class InputIt >
constexpr basic_string& replace( const_iterator first, const_iterator last,
InputIt first2, InputIt last2 );
// (4) Non const version only
constexpr basic_string& replace( size_type pos, size_type count,
const CharT* cstr, size_type count2 );
// (4) Non const version only
constexpr basic_string& replace( const_iterator first, const_iterator last,
const CharT* cstr, size_type count2 );
// (5) Non const version only
constexpr basic_string& replace( size_type pos, size_type count,
const CharT* cstr );
// (5) Non const version only
constexpr basic_string& replace( const_iterator first, const_iterator last,
const CharT* cstr );
// (6) Non const version only
constexpr basic_string& replace( size_type pos, size_type count,
size_type count2, CharT ch );
// (6) Non const version only
constexpr basic_string& replace( const_iterator first, const_iterator last,
size_type count2, CharT ch );
// (7) Non const version only
constexpr basic_string& replace( const_iterator first, const_iterator last,
std::initializer_list<CharT> ilist );
// (8) Non const version only
template < class StringViewLike >
constexpr basic_string& replace( size_type pos, size_type count,
const StringViewLike& t );
// (8) Non const version only
template < class StringViewLike >
constexpr basic_string& replace( const_iterator first, const_iterator last,
const StringViewLike& t );
// (9) Non const version only
template < class StringViewLike >
constexpr basic_string& replace( size_type pos, size_type count, const StringViewLike& t,
size_type pos2, size_type count2 = npos );
// (1) Non const version only
basic_string& replace( size_type pos, size_type count,
const basic_string& str );
// (1) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
const basic_string& str );
// (2) Non const version only
basic_string& replace( size_type pos, size_type count,
const basic_string& str,
size_type pos2, size_type count2 = npos );
// (3) Non const version only
template< class InputIt >
basic_string& replace( const_iterator first, const_iterator last,
InputIt first2, InputIt last2 );
// (4) Non const version only
basic_string& replace( size_type pos, size_type count,
const CharT* cstr, size_type count2 );
// (4) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
const CharT* cstr, size_type count2 );
// (5) Non const version only
basic_string& replace( size_type pos, size_type count,
const CharT* cstr );
// (5) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
const CharT* cstr );
// (6) Non const version only
basic_string& replace( size_type pos, size_type count,
size_type count2, CharT ch );
// (6) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
size_type count2, CharT ch );
// (7) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
std::initializer_list<CharT> ilist );
// (8) Non const version only
template < class StringViewLike >
basic_string& replace( size_type pos, size_type count,
const StringViewLike& t );
// (8) Non const version only
template < class StringViewLike >
basic_string& replace( const_iterator first, const_iterator last,
const StringViewLike& t );
// (9) Non const version only
template < class StringViewLike >
basic_string& replace( size_type pos, size_type count, const StringViewLike& t,
size_type pos2, size_type count2 = npos );
// (1) Non const version only
basic_string& replace( size_type pos, size_type count,
const basic_string& str );
// (1) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
const basic_string& str );
// (2) Non const version only
basic_string& replace( size_type pos, size_type count,
const basic_string& str,
size_type pos2, size_type count2 = npos );
// (3) Non const version only
template< class InputIt >
basic_string& replace( const_iterator first, const_iterator last,
InputIt first2, InputIt last2 );
// (4) Non const version only
basic_string& replace( size_type pos, size_type count,
const CharT* cstr, size_type count2 );
// (4) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
const CharT* cstr, size_type count2 );
// (5) Non const version only
basic_string& replace( size_type pos, size_type count,
const CharT* cstr );
// (5) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
const CharT* cstr );
// (6) Non const version only
basic_string& replace( size_type pos, size_type count,
size_type count2, CharT ch );
// (6) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
size_type count2, CharT ch );
// (7) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
std::initializer_list<CharT> ilist );
// (1) Non const version only
basic_string& replace( size_type pos, size_type count,
const basic_string& str );
// (1) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
const basic_string& str );
// (2) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
const basic_string& str );
// (3) Non const version only
template< class InputIt >
basic_string& replace( const_iterator first, const_iterator last,
InputIt first2, InputIt last2 );
// (4) Non const version only
basic_string& replace( size_type pos, size_type count,
const CharT* cstr, size_type count2 );
// (4) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
const CharT* cstr, size_type count2 );
// (5) Non const version only
basic_string& replace( size_type pos, size_type count,
const CharT* cstr );
// (5) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
const CharT* cstr );
// (6) Non const version only
basic_string& replace( size_type pos, size_type count,
size_type count2, CharT ch );
// (6) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
size_type count2, CharT ch );
// (7) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
std::initializer_list<CharT> ilist );
// (1) Non const version only
basic_string& replace( size_type pos, size_type count,
const basic_string& str );
// (1) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
const basic_string& str );
// (2) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
const basic_string& str );
// (3) Non const version only
template< class InputIt >
basic_string& replace( const_iterator first, const_iterator last,
InputIt first2, InputIt last2 );
// (4) Non const version only
basic_string& replace( size_type pos, size_type count,
const CharT* cstr, size_type count2 );
// (4) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
const CharT* cstr, size_type count2 );
// (5) Non const version only
basic_string& replace( size_type pos, size_type count,
const CharT* cstr );
// (5) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
const CharT* cstr );
// (6) Non const version only
basic_string& replace( size_type pos, size_type count,
size_type count2, CharT ch );
// (6) Non const version only
basic_string& replace( const_iterator first, const_iterator last,
size_type count2, CharT ch );
用一个新字符串替换由 [ pos, pos + count ) 或 [ first, last ) 指示的字符串部分。
新字符串可以是以下之一:
-
(1) 字符串
str
。 -
(2)
str
的子字符串 [ pos2, pos2 + count2 ),除非count2 == npos
或它会超出str.size()
,在这种情况下使用[ pos2, str.size() )
。 -
(3) 范围 [ first2, last2 ) 中的字符。
- 自 C++11 起
- 直到 C++11
重载决议当且仅当
InputIt
符合LegacyInputIterator
的条件时,此重载才参与重载决议。如果
InputIt
是整数类型,则此重载与重载 (6) 具有相同的效果。 -
(4) 范围 [ cstr, cstr + count2 ) 中的字符。
-
(5) 范围 [ cstr, cstr + Traits::length(cstr) ) 中的字符。
-
(6)
count2
个字符ch
的副本。 -
(7) 初始化列表
ilist
中的字符。 -
(8) 字符串视图
sv
中的字符,如同通过std::basic_string_view<CharT, Traits> sv = t;
从t
转换而来。重载决议当且仅当
std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>>
为true
且std::is_convertible_v<const StringViewLike&, const CharT*>
为false
时,这些重载才参与重载决议。 -
(9) 字符串视图
sv
的子视图 [ pos2, pos2 + count2 ),如同通过std::basic_string_view<CharT, Traits> sv = t;
从t
转换而来,除非count2 == npos
或它会超出sv.size()
,在这种情况下使用 [ pos2, sv.size() )。重载决议当且仅当
std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>>
为true
且std::is_convertible_v<const StringViewLike&, const CharT*>
为false
时,此重载才参与重载决议。
:::
参数
pos
- 要替换的子字符串的起始位置count
- 要替换的子字符串的长度first
,last
- 要替换的字符范围str
- 用于替换的字符串pos2
- 用于替换的子字符串的起始位置count2
- 用于替换的字符数cstr
- 指向用于替换的字符字符串的指针ch
- 用于替换的字符值first2
,last2
- 用于替换的字符范围ilist
- 带有用于替换的字符的std::initializer_list
t
- 带有用于替换的字符的对象(可转换为std::basic_string_view
)
返回值
*this
复杂度
本节需要改进。您可以通过编辑此文档页面来帮助我们。
异常
- 如果
pos > length()
或pos2 > str.length()
,则为std::out_of_range
。 - 如果结果字符串将超过最大可能的字符串长度(
max_size()
),则为std::length_error
。
示例
#include <cassert>
#include <iterator>
#include <string>
using namespace std::string_literals;
int main()
{
std::string s = "xmplr";
// replace(size_type index, size_type count, char ch)
s.replace(0, 1, 'E');
assert("Exmplr" == s);
// replace(size_type index, const char* s)
s.replace(2, "e");
assert("Exemplr" == s);
// replace(size_type index, string const& str)
s.replace(6, "a"s);
assert("Exemplar" == s);
// replace(size_type index, string const& str,
// size_type index_str, size_type count)
s.replace(8, " is an example string."s, 0, 14);
assert("Exemplar is an example" == s);
// replace(const_iterator pos, char ch)
s.replace(s.cbegin() + s.find_first_of('n') + 1, ':');
assert("Exemplar is an: example" == s);
// replace(const_iterator pos, size_type count, char ch)
s.replace(s.cbegin() + s.find_first_of(':') + 1, 2, '=');
assert("Exemplar is an:== example" == s);
// replace(const_iterator pos, InputIt first, InputIt last)
{
std::string seq = " string";
s.replace(s.begin() + s.find_last_of('e') + 1,
std::begin(seq), std::end(seq));
assert("Exemplar is an:== example string" == s);
}
// replace(const_iterator pos, std::initializer_list<char>)
s.replace(s.cbegin() + s.find_first_of('g') + 1, { '.' });
assert("Exemplar is an:== example string." == s);
}