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

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ś?

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.

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?

0

To masz jakiś pomysł?

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/questions/20721245/how-fscanf-know-this-is-the-end-of-the-line

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

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