2012-12-06 79 views
3

我的目標是調用一個函數,如果發送的字符串中有 發送的子串,函數將返回0/1,例如我不需要找到它的索引 :查找子串是否以字符串形式遞歸

字符串: 「Hello World」 的
串: 「RL」
將返回1

字符串: 「asssbdsd」
串: 「AB」
將返回0

所以我想出了這個解決方案:

int HasSubstr(char* mainStr, char* subStr) 
{ 
    if (!*subStr) 
    { 
     return 1; 
    } 
    if (!*mainStr) 
    { 
     return 0; 
    } 
    if (*mainStr == *subStr) 
    { 
     return HasSubStr(mainStr + 1, subStr + 1); 
    } 
    else 
    { 
     while(*(subStr -1)) 
     { 
      subStr--; 
     } 
     return HasSubStr(mainStr + 1, subStr); 
    } 
} 

,但它不是一個純粹的遞歸,我需要它是一個純粹的遞歸 ,幫助將非常適用

是的,這是作業

+1

這是功課,不是嗎? – Philipp

+2

@Philipp:還有什麼呢?家庭作業標籤已被棄用,因此它被正確標記。 –

+1

'這不是一個純粹的遞歸'爲什麼這樣?什麼是純遞歸? – Simon

回答

3

不要試圖將它全部適合一個功能。

int StartsWith(const char *mainstr,const char *subStr) 
{ 
    if (*subStr == '\0') return 1; 
    if (*mainStr != *subStr) return 0; 
    return StartsWith(mainStr+1,subStr+1); 
} 

int HasSubstr(const char *mainStr,const char *subStr) 
{ 
    if (StartsWith(mainStr,subStr)) return 1; 
    if (*mainStr == '\0') return 0; 
    return HasSubstr(mainStr+1,subStr); 
} 
+0

不應該是'if(* subStr =='\ 0' )返回1;'在StartsWith? –

+0

@KlasLindbäck:是的..謝謝 –