Zamiana słów w pliku tekstowym, na podstawie słownika z drugiego pliku

2018-01-23 12:35
0

Witam. Mam do napisania program, który na podstawie "słownika" z jednego pliku tekstowego zamieni zawartość drugiego. Fizycznie jej zamieniać nie musi, byleby ją wyświetlił dobrze w konsoli.
Np w pliku "słownik.txt" mam:

mama:mother,
tata,father,
babcia,grandmother

A w pliku "test.txt" mam:

mama poszla na zakupy z babcia i tata

Gdy odpale program to podmienia mi jedynie słowo "mama" na "mother" jednak słów "tata" i "babcia" nie zamienia. Program się nie wysypuje lecz zamienia tylko jakby pierwszy wyraz z pliku. Oto kod tej pętli.

while (!feof(slownik)) // dopóki nie natrafił na koniec pliku "slownik.txt"
    {
        k = 0;
        fscanf(slownik,"%s",&liniatekstu); // pobierz linie tekstu z pliku "slownik.txt"
        token = strtok(liniatekstu," ,.:"); 

        while(token != NULL)
        {
           tab[k] = token; // podziel linie na 2 slowa i przypisz do tablicy
         //  printf("%s\n", tab[k]);
           token = strtok(NULL," ,.:");
           k = k + 1;
        }
        char c;
        char slowo[1000];
        int idx = 0;

        while(! feof(fp))
        {
            c = fgetc(fp);
            if( ! isspace(c) )
            { // znak niepusty - dodaj znak do słowa
                slowo[idx++] = c;
                if(idx>=1000)
                {
                    printf("Błąd - slowo ma > 1000 znaków\n");
                    fclose(fp);
                    return -1;
                }
            }
            else 
            { // pusty znak - koniec słowa
                if(idx == 0) // idx=0 znaczy że słowo jest puste
                    continue;
                    // tu mamy gotowe słowo 
                    // - zakańczamy je 0-rem i coś z nim robimy (wydruk na ekran)
                slowo[idx] = 0;
                 // printf("%s\n", slowo);
                // TU MAM SLOWO POBRANE Z PLIKU "test.txt"
                const char* x = tab[0]; // do iksa przypisuje slowo po polsku
                const char* y = tab[1]; // do igreka przypisuje slowo po angielsku

                if ( strcmp(slowo,x)  == 0) // jezeli slowo polskie z pliku "slownik.txt" i slowo z "test.txt" są zgodne
                {
                    printf("%s ",y); // wyswietl slowo angielskie z "slownik.txt"
                }
                else
                {
                    printf("%s ",slowo); wyswietl slowo polskie z "test.txt"
                }
                idx = 0;
          }
        }
    }

Ktoś, coś?

edytowany 1x, ostatnio: furious programming, 2018-01-23 17:37

Pozostało 580 znaków

2018-01-23 13:09
0

Wygląda, że program robi to co mu kazałeś:

                const char* x = tab[0]; // do iksa przypisuje slowo po polsku
                const char* y = tab[1]; // do igreka przypisuje slowo po angielsku

Zawsze sprawdzasz dwa pierwsze słowa wczytane ze slownik.txt.

Pozostało 580 znaków

2018-01-23 13:12
Krwawy Jeleń
0

Ale przecież na samej górze pętl głównej w której czyta "słownik.txt" zeruję zmienną "k". Czy czegoś nie rozumiem?

Nie zauważyłem, że całe to jest jeszcze w pętli - Sarrus 2018-01-23 13:58

Pozostało 580 znaków

2018-01-23 14:01
Błękitny Krawiec
0

To masz jakiś pomysł?

Pozostało 580 znaków

2018-01-23 14:55
0
fscanf(slownik,"%s",&liniatekstu); // pobierz linie tekstu z pliku "slownik.txt"

To wczyta wszystko do pierwszego białego znaku, ale zignoruje znak końca linii. W przypadku Twojego pliku wczyta wszystkie linie na raz, więc pętla główna wykonuje się raz, a że korzystasz tylko z pierwszych dwóch wartości, to tylko te będą użyte.

Ktoś już napotkał podobny problem:

https://stackoverflow.com/que[...]w-this-is-the-end-of-the-line

PS. Nie piszę w C/C++ więc nie mam jak tego sprawdzić.

edytowany 2x, ostatnio: Sarrus, 2018-01-23 20:36
raczej wczyta wszystko do pierwszego "białego" znaku - kaczus 2018-01-23 20:25
poprawione - Sarrus 2018-01-23 20:34

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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