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

时间:2017-01-15 18:58:26

标签: c string c-standard-library

基本上我正在寻找的是一个像这样的标准功能

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

即G。单词为transcpy(word, "word", 'r");的{​​{1}}会将单词变为"____"

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

2 个答案:

答案 0 :(得分:1)

我认为标准库中有一个功能可以实现这一点,我将其实现为:

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终止的情况下工作,并且可以将NUL作为c来处理。

replace_by_c(dest, src, 42, '\0');

答案 1 :(得分:1)

这是一种可能的实现,它可以处理两个字符串长度不同的时间

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