Есть ли в C функция для поиска перекрытия подстрок?

#c #arrays #function #substring

#c #массивы #функция #подстрока

Вопрос:

в C есть ли функция, которая при отправке двух строк возвращает перекрытие подстрок или размер перекрытия? Итак, нравится что-то, что делает:

 char s1[5] = {cart};
char s2[4] = {car};
int overlap;
overlap = get_overlap(s1, s2); /*or have overlap be a string if it returns the overlap*.
  

и тогда перекрытие было бы равно 3.

Если нет, то как мне создать функцию, которая вернет значение int перекрытия.

Ответ №1:

Используйте strstr . Пример по ссылке:

 /* strstr example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="This is a simple string";
  char * pch;
  pch = strstr (str,"simple");
  strncpy (pch,"sample",6);
  puts (str);
  return 0;
}
  

Вывод:

Это пример строки

Примечание:

Будет сопоставлена вся подстрока; обратите внимание, что strstr частичных совпадений не выполняется.

Ответ №2:

 char *strstr(const char *str1, const char *str2);
  

Функция strstr() находит
появление str2 в str1 и
возвращает указатель на вхождение
str2 в str1. Если совпадение не найдено, то
возвращается нулевой указатель.

Ответ №3:

Уточнение: Эта функция вычисляет перекрытия типа

 string1  
    ng1randomcharacters
  

В этом случае перекрытие равно 3

 // Traverses s1 from left to right and s2 from left to right, looking for overlap
int get_overlap(char *s1, char *s2)
{
   int u2 = strlen(s2)-1;
   int p1 = strlen(s1)-1;
   int p2 = 0;

   while( p1>=0 amp;amp; p2<=u2 )
   {
      if (s1[p1--] != s2[p2  ])
      {
         --p2; // no overlap, so correct for incremented value
         break;
      }
   }

   return(p2);
}
  

Ответ №4:

Встроенной функции нет, но ее довольно просто написать:

 size_t overlap(const char *s1, const char *s2)
{
    size_t i = 0;

    while (s1[i] amp;amp; s2[i] amp;amp; s1[i] == s2[i])
        i  ;

    return i;
}
  

Комментарии:

1. Я в недоумении, почему этот ответ привлекает отрицательные голоса. Похоже, это единственный правильный ответ на исходный вопрос — ответы, в которых упоминается, strstr() не отвечают на вопрос.