Napisałem(a raczej przepisałem z książki celem pewnej modyfikacji ) sobie prosty program w C który za pomocą funkcji obsługujących pliki ma za zadanie znaleźć w tekście zawartym w tym pliku ilość wystąpień pewnego, podanego przez użytkownika, łańcucha znaków. Odpaliłem sobie program-mam tam podać nazwę pliku, który ma zostać otwarty. Stworzyłem sobie plik 'oryginal.txt' i taka nazwę wpisałem jako nazwę pliku (samej nazwy bez rozszerzenia nie chciało przyjąć) no i wpisałem łańcuch, który na 100% występuje w tym pliku po czym wywaliła mi ilość wystąpień 0... wklejam kod źródłowy, chociaż mówię jest on przepisany z książki i na 90% jest poprawny... czy źle wprowadzam dane w czasie wykonywania programu???
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int lancpoz(char*,char*);
int main (void)
{
char nazwa_pliku[20],wzorzec[100];
char lanc_we[100], *cp1,*cp2;
int ilosc_wyst,poz,dlug_wzorca;
FILE*weptr;
printf("Podaj nazwe pliku:\n ");
gets(nazwa_pliku);
printf("Podaj tekst, ktory ma byc szukany: \n");
gets(wzorzec);
if((weptr=fopen(nazwa_pliku,"r"))==NULL)
{
printf("Nie mozna otworzyc pliku wejsciowego\n");
exit (0);
}
ilosc_wyst=0;
cp2=wzorzec;
while((fgets(lanc_we,100,weptr))!=NULL)
{
cp1=lanc_we;
dlug_wzorca=strlen(cp2);
while((poz=lancpoz(cp1,cp2))>=0)
{
ilosc_wyst++;
cp1+=(poz+dlug_wzorca-1);
}
printf("Ilosc wystapien wzorca'%s' w pliku %s: %d\n",wzorzec,nazwa_pliku,ilosc_wyst);
fclose(weptr);
return 0;
}
}
int lancpoz(char*s1,char*s2)
{
int dlugosc;
char*lptr=s1;
dlugosc=strlen(s1);
while(*lptr)
{
if((strncmp(lptr,s2,dlugosc))==0)
return (lptr-s1+1);
lptr++;
}
return(-1);
}