Реализация функции strstr - C (СИ)
Формулировка задачи:
Помогите реализовать функцию strstr
int mystrstr(const char a[],const char b[])
{
int i, j, k;
for(i = 0; a[i] != '\0'; i++)
{
for(i = j, k = 0; b[k] != '\0' && a[j] == b[k]; j++, k++)
;
if(k > 0 && b[k] == '\0')
return 1;
else
return 0;
}
}Решение задачи: «Реализация функции strstr»
textual
Листинг программы
char * strstr (const char * haystack, const char * needle) {
char * needle_ptr = NULL, * haystack_ptr = NULL;
if (haystack == NULL || needle == NULL)
return NULL;
while (*haystack) {
if (*haystack == *needle) {
int trigger_out = 1;
needle_ptr = needle;
haystack_ptr = haystack;
while (*needle_ptr && *haystack_ptr) {
trigger_out = trigger_out && (*needle_ptr == *haystack_ptr);
}
if (trigger_out)
return haystack;
}
++haystack;
}
return NULL;
}
Объяснение кода листинга программы
- Функция
strstrпринимает два аргумента типаconst char *:haystack(строка, в которой ищется подстрока) иneedle(подстрока, которую необходимо найти). - Если хотя бы один из аргументов равен
NULL, функция возвращаетNULL. - В противном случае функция начинает поиск подстроки, итерируя по символам строки
haystack. - Если найденный символ равен символу подстроки
needle, функция начинает сравнение следующих символов до тех пор, пока не будет достигнута конечная подстрокаneedleили не будет найден символ, не равный символу подстрокиneedle. - Если было найдено полное совпадение подстроки
needleв строкеhaystack, функция возвращает адрес первого символа подстроки в строкеhaystack. - Если полное совпадение подстроки
needleне было найдено, функция продолжает поиск следующего символа в строкеhaystack. - Если поиск подстроки
needleв строкеhaystackне увенчался успехом, функция возвращаетNULL.