Własna funkcja strstr(). Problem w jej budowaniu.

0

Znowu utknąłem z czymś na kilka godzin, może dlatego, że za dużo robię? Piszę własną implementacje strstr(). Czy powie mi ktoś czy idę z tym kodem we właściwym kierunku?

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define DLG 256

char * zawiera_lan(char * lan1, char * lan2);

int main(void)
{
    char lancuch1[DLG], lancuch2[DLG];
    char * lancuch3;

    printf("Podaj pierwszy lancuch:\n\n");
    fgets(lancuch1, DLG, stdin);
    printf("\n\nPodaj drugi lancuch:\n\n");
    fgets(lancuch2, DLG, stdin);
    lancuch3=zawiera_lan(lancuch1, lancuch2);
    printf("\n\nLancuch wyjsciowy to: \n\n%s", lancuch3);
    getch();
    return 0;
}

char * zawiera_lan(char * lan1,char * lan2)
{
    int licznik1, licznik2, licznik3, licznik, licz;
    int miejsce1, miejsce2;
    
    miejsce1=strlen(lan1)-1;
    miejsce2=strlen(lan2)-1;
    for(licznik1=0; licznik1<miejsce1; licznik1++)
        if(lan1[licznik1]==lan2[licznik1])
          for(licznik2=licznik1, licznik3=0, licz=0; licznik2<miejsce2, lan1[licznik2]==lan2[licznik3]; licznik2++, licznik3++)
            licz++;        
    if(licz==miejsce2)
        return lan1+licz;
    else
        return NULL;
}

1

Lepiej poczytaj sobie na necie o algorytmach wyszukiwania wzorca:
http://edu.i-lo.tarnow.pl/inf/alg/001_search/0045.php (tutaj masz kilka)

1
char* zawiera_lan(char *lan1, char *lan2)
{
	int i,j;
	int len1 = strlen(lan1);
	int len2 = strlen(lan2);
	for (i=0; i<len1-len2+1; i++)
	{
		for (j=0; j<len2; j++)
			if (lan1[i+j] != lan2[j])
				break;
		if (lan2[j] == '\0')
			return lan1+i;
	}		
	return 0;
}
0

Jak wpiszę pierwszy łańcuch i drugi, który jest zawarty w pierwszym, to i tak zwraca mi null.

1 użytkowników online, w tym zalogowanych: 0, gości: 1