[C] Wyszukiwanie ilości wystąpień pewnego wzorca w .txt

Chungu
Użytkownik
Użytkownik
Posty: 121
Rejestracja: 21 paź 2016, o 20:57
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 42 razy

[C] Wyszukiwanie ilości wystąpień pewnego wzorca w .txt

Post autor: Chungu »

Witam.
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);
}
Dzięki za wszystkie odpowiedzi i podpowiedzi. :)
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C] Wyszukiwanie ilości wystąpień pewnego wzorca w .txt

Post autor: kalwi »

funkcja strstr
ODPOWIEDZ