#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()
не отвечают на вопрос.