📜  std ::字符串:: replace_copy(),std ::字符串:: replace_copy_if在C++中(1)

📅  最后修改于: 2023-12-03 15:20:20.939000             🧑  作者: Mango

std::字符串::replace_copy()和std::字符串::replace_copy_if()介绍

在C++中,标准库提供了一些用于操作字符串的函数,其中包括std::字符串::replace_copy()和std::字符串::replace_copy_if()。

std::字符串::replace_copy()

std::字符串::replace_copy()函数用于将一个字符串中的一部分替换为另一个字符串,并返回替换后的结果。

函数声明如下:

template< class InputIt, class OutputIt >
OutputIt std::replace_copy( InputIt first, InputIt last, OutputIt d_first,
                            const typename std::iterator_traits<InputIt>::value_type& old_value,
                            const typename std::iterator_traits<InputIt>::value_type& new_value );

其中,参数解释如下:

  • InputIt:表示需要进行替换操作的字符串的起始迭代器。
  • first和last:表示需要进行替换操作的字符串的起始和终止位置。
  • OutputIt:表示替换后的字符串的起始迭代器。
  • old_value:表示需要被替换的字符。
  • new_value:表示用于替换的新字符。

函数的返回值表示替换后的字符串的终止迭代器。

下面是一个简单的示例:

#include <iostream>
#include <string>
 
int main()
{
    std::string s = "hello world!";
    std::string r;
    std::replace_copy(s.begin(), s.end(), std::back_inserter(r), 'l', 'L');
    std::cout << r << '\n';
}

上面的示例中,我们将s字符串中所有的小写字母l替换为大写字母L,并将结果存放在r字符串中。输出结果为:

heLLo worLd!
std::字符串::replace_copy_if()

std::字符串::replace_copy_if()函数的用法与std::字符串::replace_copy()类似,只不过多了一个谓词函数的参数。

函数声明如下:

template< class InputIt, class OutputIt, class UnaryPredicate >
OutputIt std::replace_copy_if( InputIt first, InputIt last, OutputIt d_first,
                               UnaryPredicate p,
                               const typename std::iterator_traits<InputIt>::value_type& new_value );

其中,参数解释如下:

  • InputIt:表示需要进行替换操作的字符串的起始迭代器。
  • first和last:表示需要进行替换操作的字符串的起始和终止位置。
  • OutputIt:表示替换后的字符串的起始迭代器。
  • p:表示一个谓词函数,用于判断哪些字符需要被替换。
  • new_value:表示用于替换的新字符。

函数的返回值表示替换后的字符串的终止迭代器。

下面是一个简单的示例:

#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
 
int main()
{
    std::string s = "hello world!";
    std::string r;
    std::replace_copy_if(s.begin(), s.end(), std::back_inserter(r), 
                         [](auto c) { return std::islower(c); }, '*');
    std::cout << r << '\n';
}

上面的示例中,我们将s字符串中所有的小写字母替换为*,并将结果存放在r字符串中。输出结果为:

****o *****!

在上面的示例中,我们使用了一个lambda表达式作为谓词函数,用于判断哪些字符需要被替换。在lambda表达式中,我们使用了std::islower()函数判断字符是否为小写字母。如果是,我们就返回true,表示需要对该字符进行替换。否则,返回false,表示不需要进行替换。