1

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

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.

例如transcpy(word, "word", 'r");where word is"____"会改变 word to be"__r_"

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

4

2 回答 2

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终止的情况下工作,并且可以将字符处理NULc.

replace_by_c(dest, src, 42, '\0');
于 2017-01-15T19:22:24.847 回答
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
于 2017-01-16T11:37:16.387 回答