您好我需要写下一个代码,它使用获取字符串和char的递归,如果字符串不包含char,则返回-1,如果包含char,则返回char的位置。
这是我的代码:
int str_contains(char* string, char ch)
{
if(*string==ch) return 0;
if(*string=='\0') return -1;
int check =str_contains(string+1,ch)+1;
if(check==-1) return -1;
return check;
}
即使我输入的字符串不包含char,代码也不起作用并返回数字。
答案 0 :(得分:1)
这部分没有意义
if(check==-1) return -1;
return check;
尝试此功能,如果到达字符串的末尾,则检查值将等于0,因为check = -1 +1。
int str_contains(char* string, char ch) {
if(*string == ch)
return 0;
if(*string == '\0')
return -1;
int check = str_contains(string+1, ch) + 1;
return check > 0? check:-1;
}
如果检查大于0,则意味着您已找到char的出现,因此您将返回检查值,如果它小于或等于零,则您到达终止字符并且您已经#39 ; ll返回-1。
答案 1 :(得分:1)
此功能可以满足您的需求。
#include <stdio.h>
#include <string.h>
int str_contains(char* string, char ch, int index)
{
if( *(string + index) == ch)
return index;
if ( *(string + index) == '\0' )
return -1;
return str_contains(string, ch, index+1);
}
int main() {
char * str = "hello";
printf("Position of o in hello is %d", str_contains(str, '\0', 0 ));
}
您的方法中出现了各种错误。首先,您需要确定递归算法的基本情况。基本情况是那些将停止递归的条件。在您的情况下,有两种基本情况:
如果没有满足前面的条件,那么我们可以增加索引并在字符串的其余部分再次调用相同的函数。
答案 2 :(得分:0)
你可以这样做:
int str_contains(char* string, char ch)
{
if(*string==ch) return 0;
if(*string=='\0') return -1;
int check =str_contains(string+1,ch); // keep return value unchanged to test -1
return (check==-1) ? -1 : check + 1;
}