c - 在 C 中查找数组的索引

标签 c arrays recursion indexing

我想写一个代码,让我找到一个字母第一次出现的位置,这就是我到目前为止的想法。如您所见,函数返回的实际上是一个值而不是索引。有没有办法不用像代码2那样简单地给出索引的初始值就可以找到它?

char *recFirstPosition(char * source, int letter)
{

     if(*source == letter)
        return *source;

     if (*source =='\0')
      return 0;

     recFirstPosition(++source, letter);
}


char *recFirstPosition(char * source, int letter, int index)
{

     if(*(source+index) == letter)
        return index;

     if (*(source+index) =='\0')
      return 0;

     recFirstPosition(source, letter, ++index);
}

最佳答案

只需从第一个返回中分离 * 并为第一个版本的递归调用添加返回。

char *recFirstPosition(char * source, int letter)
{

     if(*source == letter)
        return source;

     if (*source =='\0')
      return 0;

     return recFirstPosition(++source, letter);
}

这将使代码工作。您的第一个版本导致类型错误。

下面是比上面更易读的版本:

char *recFirstPosition(char *source, char letter)
{
    if (*source == '\0')
        return NULL;
    else if (*source == letter)
        return source;
    else
        return recFirstPosition(++source, letter);
}

上面的代码也改变了第二个参数的类型,但主要是在几条评论的启发下编写的(特别感谢 Yuli 和 Dmitri)。

您可以按如下方式使用该功能:

int main()
{
    char *s = "Hello";
    char *p = recFirstPosition(s, 'l');
    if (p != NULL) {
        int index = p - s;
        printf("%s[%d] = %c\n", s, index, *p);
    }  
    return 0;
}

关于c - 在 C 中查找数组的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40940524/

相关文章:

c - 如何将文件中的数据存储在数组中的函数中,然后打印该数组?

php - mysql 显示数组 php 中的所有列名

无法理解for循环中的递归

python-3.x - Python 3-使用sys.setrecursionlimit()

c - 使用二维数组的格雷码 (C)

C 为什么函数指针作为参数而不只是一个函数?

c - fgets 清除我的 C 文件的内容并且不允许我打印到文件

javascript - ViewModel 中的 double 在 JavaScript 数组中四舍五入为整数

javascript - 使用随机数作为索引和对象作为元素创建的数组给出了错误的结果

java - 关于递归存储的二叉搜索树问题