基本上我正在寻找的是一个像这样的标准功能
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;
}
此特定示例假设target
和src
的长度相同,但这不是我正在寻找的必要前提条件。虽然c
被假定出现在src
。
即G。单词为transcpy(word, "word", 'r");
的{{1}}会将单词变为"____"
这可能只是特定于实现一个刽子手游戏,但它似乎是一个有用的功能,它可能有一个标准的实现
答案 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