递归地查找子字符串

MrP*_*le5 0 c++

不知道为什么这个问题对我来说太难了.迭代地,这是蛋糕,但是一旦堆叠展开,它就会破坏我的整个功能.

它正确地找到针并且如果找到它则给函数赋值true.但是,一旦调用堆栈展开,它就会一直恢复为false.有谁知道如何解决这个或我的代码我做错了什么?

这是我到目前为止所拥有的......

bool mySubStr(char * needle, char * haystack)
{
    int needleLength = strlen(needle);
    int haystackLength = strlen(haystack);
    bool found = false;

    if(needleLength < haystackLength)
    {
        if(strncmp(haystack, needle, needleLength) == 0)
        {
            found = true;
        }
        else
        {
            mySubStr(needle, haystack + 1);
        }
    }

    return found;
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*scu 5

您需要将递归调用的结果返回到mySubStr(..):

bool mySubStr(char * needle, char * haystack)
{
   int needleLength = strlen(needle);
   int haystackLength = strlen(haystack);

   if(needleLength > haystackLength)
       return false;

   if(strncmp(haystack, needle, needleLength) == 0)
   {
       return true;
   }

   return mySubStr(needle, haystack + 1);          
}
Run Code Online (Sandbox Code Playgroud)

在您的实现中,您以递归方式调用该函数但丢弃了结果:

  else
  {
     mySubStr(needle, haystack + 1);
  }
}

return found;
Run Code Online (Sandbox Code Playgroud)

所以实际上,除非针头恰好在开头,否则你的函数总是会返回false.