@famousman204

Как исправить ошибку в сравнении строк?

есть такой код
#include <stdio.h>
#include <string.h> // для проверки с оригиналом

char *ft_strstr(char *str, char *to_find)
{
	int i1;
	int i2;

	i1 = 0;
	i2 = 0;
	while(str[i1] != '\0') //запускаю на проверку строку
	{
		if(str[i1] == to_find[i2])
		{
			i2++;
			if(to_find[i2] == '\0')
				break;
		}
		else
			i2 = 0;
		i1++;
	}
	return (&str[i1 - i2 + 1]);
}
int main ()
{
	char str[] = "shool sholle elshool";
	char to_find[] = "ol";
	printf("%s", strstr(str, to_find));
	printf("\n%s", ft_strstr(str, to_find));
	return 0;

выхлоп получается такой:
ol sholle elshool(стандартная strstr)
olle elshool (моя strstr)
проблема заключается в том, что функция проверяет значение и когда она видит два 'o' один она принимает за соответствие, а второе 'o' она пропускает потому что оно не соответствует её второму символу и бракует его. Соответственно она пропускает скан этого символа и идёт к следующему. Как поправить эту ошибку? пробовал способ с препроверкой следующего значения, но не помогло...
хелп плиз!
  • Вопрос задан
  • 157 просмотров
Решения вопроса 1
Oldshelf
@Oldshelf
char *ft_strstr(char *str, char *to_find)
{
  int i1 = 0, i2 = 0, r = -1;
  bool check = false;

  while(str[i1] != '\0') //запускаю на проверку строку
  {
    for (i2=0; to_find[i2] != '\0'; i2++)
    {
        if(str[i1+i2] != '\0' && str[i1+i2] == to_find[i2])
            check = true;
        else
        {
            check = false;
            break;
        }
    }
    if (check)
    {
        r = i1;
        break;
    }
    i1++;
  }

  return (&str[r]);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы