递归地查找大海捞针的指数。

时间:2015-11-01 22:50:11

标签: c++

我非常接近完成我的功能。我需要取2个字符串,并在字符串1中返回字符串2的索引。我知道有一个find函数,但我无法使用它。它还必须通过递归编程来完成。

我有以下内容。

int index_of(string haystack, string needle) {

    int index = 0;
    string test = haystack.substr(index, needle.length());

    if (test == needle) {
        return index;
    }
    else {
        return 1 + index_of(haystack.substr(1), needle);
    }

}

它在大海捞针中返回针的索引没有问题,但有两件事需要做,我无法弄明白。

1)如果针不在大海捞针中,则需要返回-1。我已经完成了它,所以如果它不存在,它返回-1,但因为它是递归的,它然后添加其他时间它返回1.我不知道如何只返回一个值的结尾没有在其上添加所有其他实例。

2)我想在其中使用辅助函数,我也不知道该怎么做。

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

通常,您希望返回未掺杂的递归函数的值。在你的情况下,这个:

return 1 + index_of(some_parameters);

应该是这样的:

return index_of(some_parameters);

现在,您只需选择参数,以便在需要返回索引之前跟踪索引,或者-1。

一个这样的函数可能有构造函数:

index_of(string haystack, string needle, int index);

答案 1 :(得分:0)

这是一个演示程序,展示了如何实现该功能。

string "gh" is found in string "asdfghjkl" at position 4

它的输出是

reshape2::melt

当然,最简单的方法是定义一个静态变量,该变量将保持源字符串中的当前位置。但在这种情况下,我不认为这样的函数是纯粹的递归"。