是否有一个函数可以将一个字符的所有实例复制到另一个字符串的相同索引中?

Is there a function that copies all instances of a character into same indices in another string?

基本上我要找的是一个标准函数,可以做这样的事情

void transcpy(char *target, const char *src, const char c)
{
    for (int i = 0; i < strlen(target)+1; i++)
        if (src[i] == c) target[i] = c;
}

这个特定示例假定 targetsrc 的长度相同,但这不是我要查找的内容的必要先决条件。尽管假定 c 出现在 src.

e。 G。 transcpy(word, "word", 'r"); 其中单词 "____" 会将单词变为 "__r_"

这可能只是特定于实现一个刽子手游戏,但它似乎是一个足够有用的函数,它可能有一个标准实现

我认为标准库中没有这样的函数,我将实现为:

char *replace_by_c(char *dest, const char *src, size_t size, char c) {
  for (size_t i = 0; i < size; i++) {
    if (src[i] == c) {
      dest[i] = c;
    }
  }
  return dest;
}

在 C 中,让函数的用户处理正确的大小是很常见的。

char str_one[42];
char str_two[84];

size_t min = MIN(sizeof str_one, sizeof str_two);
replace_by_c(str_one, str_two, min, 'c');

这让一个函数可以在很多情况下使用,例如这个函数可以在没有 NUL 终止的情况下工作,并且可以像 c 一样处理字符 NUL

replace_by_c(dest, src, 42, '[=12=]');

这是一种可能的实现方式,当两个字符串长度不同时它会处理

char *transcpy(char *dest, const char *src, char c)
{
    size_t shortest = strlen(dest);

    if( strlen( dest ) > strlen(src ) )
        shortest = strlen( src );

    for (size_t i = 0; i < shortest; i++)
    {
        if( c == src[i])
        {
            dest[i] = c;
        }
    }

    return dest;
} // end function: transcpy