不知道为什么这个问题对我来说太难了。迭代地,这是蛋糕,但是一旦堆叠展开它就会破坏我的整个功能。
它正确找到针,如果找到它,则给函数一个值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;
}
答案 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。