2013-02-05 15 views
0

有關如何編寫獲取2個參數的RECURSIVE函數的任何想法: 首先是地址d(char的位置)。 秒是一個字符串。 該函數將字符串s複製到從d開始的位置。 該函數返回d作爲結果! 我們可以做到這一點沒有strcpy?如何編寫將字符串複製到某個位置的遞歸函數?

copy_r(char *s, char *d) 
{ 
    *d = *s; 
    if(*s)return copy_r(++s, ++d); 
} 

哪裏出錯? (找到) 放還是有問題的!如果位置d與某個已被s佔據的位置重疊,該怎麼辦?
這個例如 strcpy(p1,「abcdefghijklomopqrstuvwqyz」);的printf(copy_r(P1,P1 + 10));不工作 -

輸出應該klomopqrstuvwqyz

+4

是的,它可以在不'strcpy'來完成,它可以遞歸地完成。 –

+0

這與問「可以在C中實現'strcpy()」是否一樣?「,當然答案是肯定的。 – unwind

+2

當然,它可以做...有*你*還嘗試過任何東西嗎? – Mike

回答

1

where is the mistake

好,沒有任何錯誤,此代碼示例工作正常的...我看到的唯一問題是它不能像你期望的那樣工作。你提到你想要它The function returns d as a result,你沒有這樣做。

代碼目前需要s和內容複製到d所以如果你有這樣的事情:

char * str = "hello"; 
char * ptr = malloc(6); 
copy_r(str, ptr); 
// now ptr has "hello" too 
+0

將增加停止條件如 如果(s =='\ 0')返回d; 它會工作嗎? – user2042145

1

你複製邏輯是完美的。只是,你不返回任何值(d)...

這應該工作:

char* copy_r(char *s, char *d) 
{ 
    *d = *s; 
    if(*s) 
     return copy_r(s + 1, d + 1) - 1 ; //-1 is to take care of d+1 part 
    else 
     return d; 
} 

示例用法:

int main(){ 
    char src[]="hello world"; 
    char dest[50]; 

    char* t=copy_r(src,dest); 

    printf("%s\n%s\n",t,dest); //t==dest. thus you don't really have to return anything from the function. 
    return 0; 
} 
+0

謝謝!仍然存在一個問題!如果位置d重疊 某個位置已被s佔據? – user2042145

+0

strcpy(p1,「abcdefghijklomopqrstuvwqyz」); printf(copy_r(p1,p1 + 10)); printf這個例子不起作用 – user2042145

+0

因此,對於這個例子,預期的輸出是什麼? – anishsane

相關問題