递归函数,检查字符串是否包含某些char

时间:2015-06-20 14:35:20

标签: c string

您好我需要写下一个代码,它使用获取字符串和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,代码也不起作用并返回数字。

3 个答案:

答案 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 ));
}

您的方法中出现了各种错误。首先,您需要确定递归算法的基本情况。基本情况是那些将停止递归的条件。在您的情况下,有两种基本情况:

  1. 你到达字符串的末尾。
  2. 你找到了你要找的人物。
  3. 如果没有满足前面的条件,那么我们可以增加索引并在字符串的其余部分再次调用相同的函数。

答案 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;
}