2013-05-05 52 views
-6

我想給Strrchr寫遞歸函數,但我想不出這個問題的算法。我如何編寫遞歸Strrchr?如何寫遞歸Strrchr?

+2

你需要考慮更多:( – Maroun 2013-05-05 20:15:38

+3

你想實現strrchr()作爲遞歸函數嗎?這甚至是有意義的嗎? – 2013-05-05 20:23:29

回答

0
#include <stdio.h> 

char *StrrchrR(const char *s, int c, char *find){ 
    if(s==NULL) return NULL; 
    if(*s == '\0') return (c == '\0') ? (char*)s : find; 
    return StrrchrR(s + 1, c, *s == c ? (char*)s : find); 
} 

char *Strrchr(const char *s, int c){ 
    return StrrchrR(s, c, NULL); 
} 
/* 
char *Strrchr(const char *s, int c){ 
    char *ret; 
    if(s == NULL)return NULL; 
    if(*s=='\0') return (c == '\0') ? (char*)s : NULL; 
    if(ret = Strrchr(s + 1, c)) return ret; 
    if(*s == c) return (char*)s; 
    return NULL; 
} 
*/  
int main(void){ 
    const char *str = "abcabdefg"; 
    char *cp; 

    cp=Strrchr(str, '\0'); 
    printf("%c\n", *--cp);//g 
    cp=Strrchr(str, 'b'); 
    printf("%c\n", *++cp);//d 
    cp=Strrchr(str, 'z'); 
    if(!cp)printf("NULL\n");//NULL 
    return 0; 
}