递归函数,返回包含在字符串中的子字符串的第一个索引

时间:2016-01-26 20:54:09

标签: c string recursion strcmp strlen

我需要创建一个递归函数,它获取两个char数组,并返回第一个索引,其中“subStr”出现在“str”中。

功能签名:

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

例如 - 对于str =“abcdebc”和subStr =“bc”,它将返回1(因为1是str中包含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
}

但是可以在没有数组的最小元素的情况下调用递归吗?

1 个答案:

答案 0 :(得分:1)

该功能可以按以下方式查看

ruby filename.rb

程序输出

#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 ) );
}