递归地查找子字符串

时间:2014-04-01 02:11:16

标签: 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;
}

1 个答案:

答案 0 :(得分: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);          
}

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

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

return found;

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