Witam.
Dostałem do napisania algorytm na wyszukiwanie wzorca w tekście (naiwny oraz KMP), sam algorytm nie sprawia mi problemu, a bardziej jego dopieszczenie, czyli ograniczenie długości słowa do 50, a wzorca do 10.. Dokładniej chodzi mi o to, że gdy user poda za długie słowo (> 50) to program prosi go o zrobienie tego jeszcze raz - wiadomo while - ale zauważam, że to sprawia jakieś problemy, zmienia mi zawartość tekstu, a potem wzorca.. Wysypuje się...
Tutaj kod:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void algNaiwny(char *tekst, char *wzorzec);
void read(char *tekst, char *wzorzec);
int main()
{
char *tekst;
char *wzorzec;
read(&tekst, &wzorzec);
algNaiwny(&tekst, &wzorzec);
return 0;
}
void algNaiwny(char *tekst, char *wzorzec)
{
int i = 0;
int m = strlen(tekst);
int n = strlen(wzorzec);
while (i < m - n)
{
int j = 0;
while((wzorzec[j] == tekst[i+j]) && (j < n))
j++;
if(j == n)
printf("Indeks: %d\n", i+1);
i++;
}
}
void read(char *tekst, char *wzorzec)
{
printf("Podaj tekst: ");
scanf("%s", tekst);
while(strlen(tekst) > 50)
{
memset(tekst, '\0', sizeof(char*)*strlen(tekst));
printf("Podaj jeszcze raz, przekroczyles zakres: \n");
scanf("%s", tekst);
}
printf("Podaj wzorzec: ");
scanf("%s", wzorzec);
while(strlen(wzorzec) > 10)
{
memset(tekst, '\0', sizeof(char*)*(strlen(wzorzec)));
printf("Podaj jeszcze raz, przekroczyles zakres: \n");
scanf("%s", wzorzec);
}
printf("\nTekst: %s\n", tekst);
printf("\nWzorzec: %s", wzorzec);
}
Próbowałem to robić memsetem, ale to nic nie daje.. Już nie mam pomysłów jak to skutecznie załatwić..
Z góry dziękuję za pomoc.