2016-01-26 1 views
-3

Мне нужно сделать рекурсивную функцию, которая получает два массива символов и возвращает первый индекс, где «subStr» появляется в «str».рекурсивная функция, возвращающая первый индекс, где подстрочная строка содержится в строке

Подпись функции:

int strIndex(char str[], subStr[]); 

Для ПРИМЕР- для ул = "abcdebc" и SubStr = "БК", он будет возвращать 1 (1, потому что это первый индекс, где SubStr содержится в ул), и для str = "ab" и subStr = "ab" он вернет 0. Если subStr не содержится в str (например, str = "abc", subStr = "aa"), он вернет -1.

Это то, что я пытался сделать:

int strIndex(char str[], char subStr[]) 
{ 
    if (strcmp(str, subStr) == 0) 
     return 0; 
    else if (strcmp(str + (strlen(str1) - strlen(subStr)), subStr) == 0) 
     return strlen(str) - strlen(subStr); 
    else 
     //return without the last element of "str" array 
} 

но делает это можно назвать в recurstion без LEST элемента массива?

+4

А? Мы не собираемся делать это за вас. – NathanOliver

+0

Опубликуйте свою реализацию рекурсивной функции и объясните, как она работает не так, как вы ожидаете. – drescherjm

+0

'str2-1' ?? недействительный указатель !. – BLUEPIXY

ответ

1

Функция может выглядеть следующим образом

#include <stdio.h> 
#include <string.h> 

int indexOf(const char *s1, const char *s2) 
{ 
    size_t n1 = strlen(s1); 
    size_t n2 = strlen(s2); 

    if (n1 < n2) 
    {   
     return -1; 
    } 
    else if (strncmp(s1, s2, n2) == 0) 
    { 
     return 0; 
    } 
    else 
    { 
     int rtn = 1 + indexOf(s1 + 1, s2); 
     return rtn == 0 ? -1 : rtn; 
    } 
}  

int main(void) 
{ 
    const char *s = "abcdebc"; 
    const char *t = "bc"; 

    printf("Index of \"%s\" in \"%s\" is %d\n", t, s, indexOf(s, t)); 
}  

Выход программы

Index of "bc" in "abcdebc" is 1 
Смежные вопросы