C++ 递归查找子字符串

C++ 递归查找子字符串,c++,C++,我不知道为什么这个问题对我来说这么难。迭代地,这是一个蛋糕,但一旦堆栈展开,它就会破坏我的整个函数 它可以正确地找到指针,如果找到,则为函数提供一个true值。但是,一旦调用堆栈展开,它就会不断恢复为false。是否有人知道如何纠正这一点,或者我的代码有什么错误 这是我到目前为止所拥有的 bool mySubStr(char * needle, char * haystack) { int needleLength = strlen(needle); int haystackLe

我不知道为什么这个问题对我来说这么难。迭代地,这是一个蛋糕,但一旦堆栈展开,它就会破坏我的整个函数

它可以正确地找到指针,如果找到,则为函数提供一个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;
}
bool mySubStr(char*needle,char*haystack)
{
内针长度=斯特伦(针);
int haystackLength=strlen(干草堆);
bool-found=false;
if(针长<针长)
{
如果(strncmp(草堆、针、针长度)==0)
{
发现=真;
}
其他的
{
mySubStr(针筒、干草堆+1);
}
}
发现退货;
}

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

在您的实现中,您递归调用函数,但放弃了结果:

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

return found;

因此,实际上,除非指针在开始时恰好正确,否则函数将始终返回false。

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

在您的实现中,您递归调用函数,但放弃了结果:

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

return found;

因此,实际上,除非指针在开始时恰好正确,否则您的函数将始终返回false。

如果您能具体说明您预期的结果、实际得到的结果以及迄今为止您为理解或解决问题所采取的步骤,这将是有帮助的。当我输入指针时,我预期的结果为true=“sip”和haystack=“Mississippi”。我实际得到的结果是错误的。我已经采取了很多步骤来解决这个问题。我甚至不知道从哪里开始。只需在else块中添加一点代码:find=mySubStr(needle,haystack+1);如果你能具体说明你期望的结果、你实际得到的结果以及你迄今为止为理解或解决问题所采取的步骤,那将是很有帮助的。当我看到针头=“sip”和干草堆=“密西西比”时,我期望的结果是正确的“.我实际得到的结果是错误的。我为解决这个问题采取了很多步骤。我甚至不知道从哪里开始。只需在else块中添加一点代码:find=mySubStr(needle,haystack+1);或者他可以这样做:found=mySubStr(needle,haystack+1)@米基·迪内斯库——哇,太谢谢你了!!xuwicha,我试过了,它一直给我同样的问题。当堆栈调用Unbound时,将found还原为false。@MrPickle5:还在第一个if条件中添加“=”:if(needlegth)或他可以这样做:found=mySubStr(needle,haystack+1)@Miky Dinescu--哇,非常感谢!!xuwicha,我试过了,但它一直给我带来同样的问题。当堆栈调用Unbound时,将find还原为false。@MrPickle5:还在第一个if条件中添加“=”:if(needleLength)