2017-01-15 15 views
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中。

e。 G。 transcpy(word, "word", 'r");其中一句話是"____"會發生變異的字是"__r_"

這也可能只是具體到實施劊子手遊戲,但它似乎是一個非常有用的功能足夠,它可能有一個標準的實施

+5

沒有,有沒有這樣的標準功能。你只需要修改你的函數來處理'src'和'target'長度不同,空指針等等的情況。 – usr

+0

我不知道標準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工作終止,並能處理的字符作爲NULc

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

這不處理源數組和目標數組長度不同的情況。 – user3629249

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 
相關問題