Problem z strtr

Odpowiedz Nowy wątek
2011-08-30 12:39
Vorm
0

Mam takie oto zadanie:
Zadanie polega na wyszukiwaniu slow podanych przez użytkownika w tekscie, znajdujacym sie we
wskazanym pliku *.txt.
dzialania programu wyglada tak:

  1. uzytkownik podaje dostep do pliku (sciezke dostepu) + nazwe pliku. program otwiera plik wtrybie do odczytu, jezeli nie ma takiego pliku podaje odpowiedni komunikat i czeka na wprowadzenie poprawnej nazwy;
  2. po poprawnym dostepie do pliku, program pyta o szukany tekst, w tym przypadku moze tobyc:
    a. pojedyncze slowo
    b. ciag sloww obu przypadakch maksymalna liczba wprowadzanych znakow nie wieksza niz 100
  3. po wprowadzeniu szukanego slowa/slow nastepuje jego wyszukanie w pliku, odpowiedzia programu jest:
    a. numer linii, w ktorej sie pierwszy znaleziony tekst
    b. wszystkie wystapienia tekstu - wypisana zostaje tablica, zawierajac numery linii,
    c. wypisywany jest numer linii z tekstem z zapytaniem czy szukac dalej, jesli tak szukanie zaczyna sie od miejsca poprzedniego znalezienia szukanego tekstu.
  4. wyniki pracy programu zapisywane sa rowniez w pliku wyjsciowym - nazwe podaje uzytkownik.

Mój problem pojawia się, gdy w linijce pliku txt znajduję się więcej niż jeden szukany wyraz. Program wyświetla wtedy numery linii, w których nie zawsze występują słowa.
Kod:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void zapis(char *temp,FILE *fp1, char znak)
{
    int j=0;
    do
        {
         znak=fgetc(fp1);    //kopiujemy wyraz do bufora tymczasowego
         temp[j]=znak;
         j++;

        }while(znak!='\n');
}

int main()
{
    FILE *fp1,*fp2;

    char src[100];
    char dst[100];
    char slowo[100];

    char temp[500];

    int i=0;
    int wiersze=0;
    int znak;
    int j=0;

    printf("Podaj sciezke do pliku (plik bez polskich znakow, ostatnia linia zakonczona enterem): \n");
    gets(src);

    ///////////////////////////////////////////////////////////////
     while ((fp1=fopen(src,"r"))==NULL)
    {
        printf("Blad otwarcia pliku! Wpisz sciezke ponownie.\n");
        gets(src);
    }
    ///////////////////////////////////////////////////////////////

    printf("Podaj slowo/wyraz do wyszukania w pliku: \n");
    gets(slowo);

    ///////////////////LICZNIK WIERSZY////////////////////////////
    do
    {
        znak=fgetc(fp1);
        if (znak=='\n') wiersze++;
    } while(znak != EOF);

    printf("Ilosc wierszy: %d",wiersze);
    //////////////////////////////////////////////////////////////
    fseek(fp1,0,0);
    char tablica[wiersze][500]; //tu bedzie wszystko
    long offset;

    for(i=0;i<wiersze;i++)
    {
        for(j=1;j<500;j++)
        {
            tablica[i][j]=0;
        }
    }

    for(i=0;i<wiersze;i++)
    {
         zapis(temp,fp1,znak);

         offset=ftell(fp1);

        j=0;

        tablica[i][0]=i+1;  //wpisujemy numery wierszy

        for(j=1;j<500;j++)
        {

            tablica[i][j]=temp[j-1]; //wpisujemy do tablicy
        }

    }

     for(i=0;i<wiersze;i++)  //wyswietlanie
    {
        printf("\n%d ",tablica[i][0]);
        for(j=1;j<500;j++)
        {
            if(tablica[i][j]=='\n')
            break;
            printf(" %c",tablica[i][j]);
        }

    }
   ////////////////SZUKANIE//////////////////
   char *poz;
   int found=0;
   for(i=0;i<wiersze;i++)
   {
        poz=strstr(tablica[i],slowo);
        if(poz!=NULL)
        {
            found=i+1;
            break;
        }
   }
   if (found == 0)
        printf("\n Nie znaleziono podanego slowa/slow.\n\n");
   else
        printf("\nPierwszy napotkany wiersz z podanym slowem/slowami: %d\n\n",found);
    ///////////////////////////////////////////

    /////////////WYPISYWANIE WSZYSTKICH//////////////////////////
    int a=0;
    printf("Numery wszystkich linii z podanym slowem/slowami.\n");
    printf("*************************************************\n");
    for(i=0;i<wiersze;i++)
   {

        poz=strstr(tablica[i],slowo);
        printf("\n test: i=%d, poz=%p",i+1,poz);
        if(poz!=NULL )
        {
            printf("%d\t",i+1);
        }
        poz=0;

   }
   printf("\n");
    ////////////////////////////////////////////////////////////

    int help=0;
    char wybor;
    for (i=0;i<wiersze;i++)
    {
        poz=strstr(tablica[i],slowo);
        if(poz!=NULL)
        {
            printf("\n%d.\t",tablica[i][0]);
            for(j=1;j<500;j++)
            {
                if(tablica[i][j]=='\n')
                break;
                printf("%c",tablica[i][j]);
            }
            printf("\n");
        }
       // else help++;

     }

    system("Pause");
    return 0;
}

Dodatkowo zamieszczam treść testowanego pliku txt (probelm pojawia się np. przy słowie "slowo")

Zadanie polega na wyszukiwaniu slow slow podanych przez uzytkownika w tekscie, znajdujacym sie
we wskazanym nazwe pliku *.txt.
dzialania programu wyglada tak:

  1. uzytkownik podaje nazwe dostep do pliku (sciezke dostepu) + nazwe pliku. program otwiera plik w
    trybie slow do odczytu, slow jezeli nazwe nazwe nie ma slow nazwe takiego pliku podaje odpowiedni komunikat i czeka na
    wprowadzenie poprawnej nazwy;
  2. po poprawnym nazwe dostepie do pliku, program pyta o szukany tekst, w tym przypadku moze to
    byc:
    a. pojedyncze slowo slow bla bla
    b. ciag slow bla bla
    w obu przypadakch maksymalna liczba wprowadzanych slow znakow nie slow wieksza niz 100
  3. po wprowadzeniu szukanego slow slowa/slow nastepuje jego wyszukanie w pliku, odpowiedzia
    programu jest:
    a. numer linii, w slow ktorej slow slow sie pierwszy slow znaleziony tekst
    b. wszystkie wystapienia tekstu - wypisana zostaje tablica, zawierajac numery linii,
    c. wypisywany slow jest nazwe numer linii z tekstem z zapytaniem nazwe slow czy szukac dalej, jesli tak szukanie
    zaczyna sie od miejsca slow poprzedniego znalezienia szukanego tekstu.
  4. wyniki pracy programu zapisywane slow sa rowniez w pliku wyjsciowym - nazwe podaje
    uzytkownik.

Pozostało 580 znaków

2011-08-30 14:45
0

Cóż,poszukaj w góglach cóż to takiego jest debugger i jak tego używać.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

2011-08-30 15:10
Vormi
0
MasterBLB napisał(a)

Cóż,poszukaj w góglach cóż to takiego jest debugger i jak tego używać.

A czy ktoś mógłby jednak spojrzeć na ten kod?

debugger jednak nie działa? - Markness 2011-08-30 15:16
Spojrzałem.W c**** długi,a ja kompilować w głowie nie będę.Gdybym to ja miał taki kłopot,nie zawracałbym ludziom d**y tylko odpalił debuggera i znalazł,która linijka działa nie tak jak powinna - MasterBLB 2011-08-30 15:25

Pozostało 580 znaków

2011-08-30 15:43
Vorm
0

Debugger nic nie mówi.

Nie debugger nic nie mówi tylko ty z niego korzystać nie potrafisz. - Rev 2011-08-30 15:51

Pozostało 580 znaków

2011-08-30 15:57
0

Cóż,moja rada abyś poczytał czym jest debugger i jak go używać to nie było ot tak sobie powiedziane aby posta nabić.Wiedz,że jeśli chcesz programować to z debugerem i googlami powinieneś być dobrze obeznany.
Co do debuggera to poszukaj sobie,czym jest praca w trybie krokowym oraz jak w nim ustawiać pułapki (breakpoint) oraz jak sprawdzać wartości danych lokalnych,globalnych,układ stosu oraz pamięć w postaci hexów.
To tyle,nic więcej nikt raczej ci nie powie.Uważamy tu na 4p,że człowiek piszący programy winien być samodzielny i samemu szukać rozwiązania,a nie zapodawać kod z prośbą "weźcie zróbcie za mnie".Nie odwalamy tutaj roboty za leni


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 1x, ostatnio: MasterBLB, 2011-08-30 15:59

Pozostało 580 znaków

2011-08-30 22:22
Vorm
0

Ok, przeprosiłem się z debuggerem, dowiedziałem się dlaczego występował problem. Dziękuję za pomoc i sugestie ;)

Temat do zamknięcia.

Debugger to największy przyjaciel programisty ;)Btw,zaznacz zielonego ptaszka przy poście który uważasz za użyteczny - MasterBLB 2011-08-30 22:30

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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