Создать подобную функцию strstr - C (СИ)
Формулировка задачи:
Вообщем мой преподователь дал мне задание: создать подобную функцию strstr, чтобы моя функция my_strstr работала также.
Есть ряд тестов которые он мне составил, результат должен быть одинаковый, как в случае функции strstr так и в моей my_strstr.
ЗАДАЧА:доделать прогу так, чтобы my_strstr работала также как и функция strstr.
ВОТ И САМА ПРОГА ТЕСТ:
#include <stdio.h> #include <string.h> char *my_strstr(const char *haystack, const char *needle) { return NULL; } void analyze(const char *r) { if (r == NULL) printf("NULL\n"); else printf("%s\n", r); } int main(int argc, char *argv[]) { printf("1.\n"); analyze(strstr("Hello world !!!", "llo w")); analyze(my_strstr("Hello world !!!", "llo w")); printf("2.\n"); analyze(strstr("Hello world !!!", "llu w")); analyze(my_strstr("Hello world !!!", "llu w")); printf("3.\n"); analyze(strstr("Hello world !!!", "Hello world !!!")); analyze(my_strstr("Hello world !!!", "Hello world !!!")); printf("4.\n"); analyze(strstr("Hello world !!!", "H")); analyze(my_strstr("Hello world !!!", "H")); printf("5.\n"); analyze(strstr("Hello world !!!", "d")); analyze(my_strstr("Hello world !!!", "d")); scanf("%*c"); return 0; }
Решение задачи: «Создать подобную функцию strstr»
textual
Листинг программы
char *my_strstr(const char *haystack, const char *needle) { const char *temp, *c; temp = needle; while (*haystack) { c = haystack; while(*(haystack++) == *(needle++)) { if (!(*needle)) { return (char*)c; } if(!(*haystack)) { return NULL; } } needle = temp; } return NULL; }
Объяснение кода листинга программы
Создана функция my_strstr, которая ищет первое вхождение подстроки needle в строке haystack.
- Первый аргумент функции — haystack, это строка, в которой мы ищем подстроку.
- Второй аргумент функции — needle, это подстрока, которую мы ищем в haystack.
- В функции создаются две константные указатели temp и c, которые будут использоваться для временного хранения значений.
- Указатель temp инициализируется значением needle, чтобы в случае, если подстрока не найдена, можно было начать поиск с начала подстроки.
- В цикле while проверяется, не является ли текущий символ в haystack нулевым символом. Если это так, то мы достигли конца строки haystack и должны вернуть NULL.
- Если текущий символ в haystack не равен нулю, то мы переходим к следующему символу в haystack.
- В цикле while проверяется, совпадает ли текущий символ в haystack с текущим символом в needle. Если это так, то мы переходим к следующему символу в обоих строках.
- Если текущий символ в haystack не равен текущему символу в needle, то мы выходим из внутреннего цикла и переходим к следующей итерации внешнего цикла.
- Если мы достигли конца подстроки needle, то мы возвращаем указатель на первое вхождение подстроки needle в haystack.
- Если мы достигли конца строки haystack или не нашли подстроку needle, то мы возвращаем NULL.
- Функция возвращает найденную подстроку в виде указателя на первый символ подстроки в haystack. Если подстрока не найдена, то возвращается NULL.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д