Как самому реализовать поиск одной строки в другой на c++?

Так как являюсь начинающим, хочется узнать, насколько корректным является это решение. Задача: найти строку for_search в строке string. Что я сделал неправильно? Как иначе можно реализовать нечто подобное? Заранее спасибо за ответы.
int find_str(char *some, char *for_search){
	char *p, *j;
	for (int i = 0; some[i]; i++){
		p = &some[i];
		j = for_search;
		while (*p == *j && *p != 0){
			j++; p++;
		}
		if (!*j && (*p == ' ' ||  !*p)) return i;
		else {
			p = &some[i];
			j = for_search;
		}
	}
	return 0;
}
  • Вопрос задан
  • 6455 просмотров
Пригласить эксперта
Ответы на вопрос 4
IgorO2
@IgorO2
73
Возьми исходник какой-нибудь CRT.

char * __cdecl strstr (
            const char * str1,
            const char * str2
            )
    {
            char *cp = (char *) str1;
            char *s1, *s2;
     
            if ( !*str2 )
                return((char *)str1);
     
            while (*cp)
            {
                    s1 = cp;
                    s2 = (char *) str2;
     
                    while ( *s1 && *s2 && !(*s1-*s2) )
                            s1++, s2++;
     
                    if (!*s2)
                            return(cp);
     
                    cp++;
            }
     
            return(NULL);
     
    }
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Некрасиво:
*j++; *p++;
Вы увеличиваете значение указателя, а затем для чего-то получаете символ по нему. Правильно:
j++; p++;
А вообще, у Вас реализован простейший алгоритм. Список алгоритмов можно посмотреть здесь.
Ответ написан
@xandox
У тебя тут время квадратное + не понятно что именно возвращает функция, ну точнее она у тебя возвращает 1 (true) если нашла строку и 0 (false) если не нашла, но зачастую нужно место где строка начинается.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы