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

しかし、それは純粋な再帰ではなく、純粋な再帰である必要があります。ヘルプが大いに適用されます

はい、これは宿題です

4

1 に答える 1

3

すべてを 1 つの関数に収めようとしないでください。

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);
}
于 2012-12-06T14:53:34.500 に答える