Создать подобную функцию 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.

  1. Первый аргумент функции — haystack, это строка, в которой мы ищем подстроку.
  2. Второй аргумент функции — needle, это подстрока, которую мы ищем в haystack.
  3. В функции создаются две константные указатели temp и c, которые будут использоваться для временного хранения значений.
  4. Указатель temp инициализируется значением needle, чтобы в случае, если подстрока не найдена, можно было начать поиск с начала подстроки.
  5. В цикле while проверяется, не является ли текущий символ в haystack нулевым символом. Если это так, то мы достигли конца строки haystack и должны вернуть NULL.
  6. Если текущий символ в haystack не равен нулю, то мы переходим к следующему символу в haystack.
  7. В цикле while проверяется, совпадает ли текущий символ в haystack с текущим символом в needle. Если это так, то мы переходим к следующему символу в обоих строках.
  8. Если текущий символ в haystack не равен текущему символу в needle, то мы выходим из внутреннего цикла и переходим к следующей итерации внешнего цикла.
  9. Если мы достигли конца подстроки needle, то мы возвращаем указатель на первое вхождение подстроки needle в haystack.
  10. Если мы достигли конца строки haystack или не нашли подстроку needle, то мы возвращаем NULL.
  11. Функция возвращает найденную подстроку в виде указателя на первый символ подстроки в haystack. Если подстрока не найдена, то возвращается NULL.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.333 из 5
Похожие ответы