我想写一个代码,让我找到一个字母第一次出现的位置,这就是我到目前为止的想法。如您所见,函数返回的实际上是一个值而不是索引。有没有办法不用像代码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/