在C语言中查找子字符串



我遇到了这个问题,如果有什么建议的话,我将不胜感激。

此函数在original中查找toFind的第一次出现,并返回一个整数,表示original中toFind子字符串的第一个元素的索引。例如,如果toFind是'man', original是'superman',则函数将返回6,因为'spiderman'中'man'的开头是位置7。如果函数没有找到子字符串,它应该返回-1。

目前为止我有什么:

{
   printf("%sn%sn", original, toFind);
   int j, i, k, start, length;
   i = 0;
   j = 0;
   k = 0;
   length = (int)strlen(original);
   start = 0;
   printf("%dn", length);
   for (i = 0; i < strlen(toFind); ++i)
   {
      while (j != (length - 1))
      {
         printf("j: %dn", j);
         if (toFind[i] == original[j])
         {            
            while (k != strlen(toFind))
            { 
               if (toFind[i + k] == original[j + k])
               {
                  printf("k: %dn", k);
                  k = k + 1;
                  start = j;
               }  
               else
               {
                  k = 0;
               } 
            }
         }
         else
         {
            ++j;
         }        
      }
  }
   printf("%dn", start);
    if (k == strlen(toFind))
      {
         printf("Word foundn");
         return start;
      }
      else
      {
         printf("Word not foundn");
         return -1;
      }
return 0;

不是想帮你做你的工作,但这里是我想出的一个简短的例子。这是未经检验的。基本上,它遍历字符串1,直到找到一个匹配的字符,然后遍历两个字符串,直到找到一个不匹配的字符或字符耗尽。

const char* str1 = "Hello find me" , *str2 = "find";
int i = 0;
while (str1[i]) {
    while (str1[i] && str1[i] != str2[0]) {
        ++i;
    }
    int j = 0;
    while (str1[i + j] && str1[i + j] == str2[j]) {
        ++j;
    }
    if (!str2[j]) {return i;}
}
return -1;

无论condition为真还是假,都必须将j的值增加1。在你的代码中,当if条件为真时,j的值在那之后不再增加。所以它总是在那个条件下得到真值。我可能不会跟你说清楚。将else{ ++j; }替换为++j;

相关内容

  • 没有找到相关文章

最新更新