跳到主要内容

std::string replace() 方法

// (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 );

用一个新字符串替换由 [ pos, pos + count )[ first, last ) 指示的字符串部分。

新字符串可以是以下之一:

  • (1) 字符串 str

  • (2) str 的子字符串 [ pos2, pos2 + count2 ),除非 count2 == npos 或它会超出 str.size(),在这种情况下使用 [ pos2, str.size() )

  • (3) 范围 [ first2, last2 ) 中的字符。

    重载决议

    当且仅当 InputIt 符合 LegacyInputIterator 的条件时,此重载才参与重载决议。

  • (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>>truestd::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>>truestd::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

复杂度

重要

本节需要改进。您可以通过编辑此文档页面来帮助我们。

异常

在任何情况下,如果由于任何原因抛出异常,此函数无效(强异常保证)。 (自 C++11 起)

示例

Main.cpp
#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);
}
本文来自CppReference 页面。它可能经过修改以进行改进或适应编辑者的偏好。点击“编辑此页面”查看本文档的所有更改。
悬停查看原始许可证。

std::string replace() 方法

// (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 );

用一个新字符串替换由 [ pos, pos + count )[ first, last ) 指示的字符串部分。

新字符串可以是以下之一:

  • (1) 字符串 str

  • (2) str 的子字符串 [ pos2, pos2 + count2 ),除非 count2 == npos 或它会超出 str.size(),在这种情况下使用 [ pos2, str.size() )

  • (3) 范围 [ first2, last2 ) 中的字符。

    重载决议

    当且仅当 InputIt 符合 LegacyInputIterator 的条件时,此重载才参与重载决议。

  • (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>>truestd::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>>truestd::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

复杂度

重要

本节需要改进。您可以通过编辑此文档页面来帮助我们。

异常

在任何情况下,如果由于任何原因抛出异常,此函数无效(强异常保证)。 (自 C++11 起)

示例

Main.cpp
#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);
}
本文来自CppReference 页面。它可能经过修改以进行改进或适应编辑者的偏好。点击“编辑此页面”查看本文档的所有更改。
悬停查看原始许可证。