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

Posted

技术标签:

【中文标题】是否有一个函数可以将一个字符的所有实例复制到另一个字符串中的相同索引中?【英文标题】:Is there a function that copies all instances of a character into same indices in another string? 【发布时间】:2017-01-15 18:58:25 【问题描述】:

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

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"); where word is "____" 将改变 word 为 "__r_"

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

【问题讨论】:

不,没有这样的标准功能。您只需要修改您的函数来处理srctarget 的长度、空指针等不同的情况。 我不知道标准 c 中的任何此类功能;然而,在 C++ 中,lambda 函数会提供更多的灵活性。 【参考方案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');

【讨论】:

这不处理源和目标数组长度不同的情况。【参考方案2】:

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

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

【讨论】:

以上是关于是否有一个函数可以将一个字符的所有实例复制到另一个字符串中的相同索引中?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在不使用 LoadLibrary 的情况下将函数“复制”到另一个进程中并在线程中执行它?

写一个函数,将一个字符串中的元音字母复制到另一字符串,然后输出

快速将InnoDB表复制到另一个实例

将一种结构复制到另一种结构

我需要知道如何将 c 字符串从一个变量复制到另一个变量,以便让第三个函数在我的程序中工作

是否有一个函数可以从字符串中删除任何符号(%、# 等)? [复制]