我有这个问题的麻烦,关于如何解决它的任何提示将不胜感激。


  此函数在原​​始条件下查找toFind的第一个匹配项,并返回一个整数,该整数表示原始条件下toFind子字符串的第一个元素的索引。例如,如果toFind是'man',原始是'superman',则该函数将返回6,因为'spiderman'中'man'的开头位于位置7。如果该函数未找到子字符串,则应返回-1。


到目前为止,我有:

{
   printf("%s\n%s\n", original, toFind);
   int j, i, k, start, length;
   i = 0;
   j = 0;
   k = 0;
   length = (int)strlen(original);
   start = 0;

   printf("%d\n", length);

   for (i = 0; i < strlen(toFind); ++i)
   {
      while (j != (length - 1))
      {
         printf("j: %d\n", j);
         if (toFind[i] == original[j])
         {

            while (k != strlen(toFind))
            {
               if (toFind[i + k] == original[j + k])
               {
                  printf("k: %d\n", k);

                  k = k + 1;
                  start = j;
               }
               else
               {
                  k = 0;

               }
            }
         }
         else
         {
            ++j;

         }
      }
  }
   printf("%d\n", start);
    if (k == strlen(toFind))
      {
         printf("Word found\n");
         return start;
      }
      else
      {
         printf("Word not found\n");
         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;

关于c - 在C中查找子字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40580839/

10-11 12:49
查看更多