【问题标题】:Finding substrings in C在 C 中查找子字符串
【发布时间】:2016-11-14 01:50:13
【问题描述】:

我遇到了这个问题,如果有任何解决方法的提示,我们将不胜感激。

此函数在 original 中查找 toFind 的第一次出现,并返回一个整数,表示 toFind 子字符串在 original 中的第一个元素的索引。例如,如果 toFind 是 'man' 而 original 是 '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;

【问题讨论】:

  • 您需要描述一个具体的问题。你所拥有的有什么问题?它怎么没有按你的意愿工作?
  • 使用strstr...

标签: c arrays function substring c-strings


【解决方案1】:

不是想为你做你的工作,但这是我想出的一个简短的例子。它未经测试。基本上它会遍历字符串 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;

【讨论】:

    【解决方案2】:

    无论条件是真还是假,您都必须将 j 的值增加 1。在您的代码中,如果条件为真,则 j 的值此后不会增加。所以它卡在那里并且总是在那个条件下获得真正的价值。我可能不会向你澄清这一点。只需将else{ ++j; } 替换为++j;

    【讨论】:

      猜你喜欢
      • 2012-11-10
      • 2013-06-01
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多