Słownik - problem z zamianą

0

Witam. Pisałem już prędzej posta i jest progress lekki w programie jednak nadal nie wiem czemu nie działa. Działanie programu ma polegać na tym by zamieniał on dane z jednego pliku na podstawie innego i wyświetlał je w konsoli (musi być pisane w języku C).
Jeden plik (slownik.txt) jest jakby słownikiem, a jego zawartość to:

"mama:mother,
tata:father,
babcia:grandma,
na:on,
ja:i,
ty:you,"

Drugi zaś jest plikiem którego tekst ma zostać podmieniony i wyświetlony. Jego zawartość:
"mama poszla z tata na zakupy"

Program końcowo na podstawie przykładów powinien wyświetlić:
"mother poszla z father on zakupy", a wyświetla
"mother poszla z tata na"

Poniżej kod programu. Już nie wiem, co jest nie tak.

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cstring>
#include <ctype.h>

int _tmain(int argc, _TCHAR* argv[])
{
   FILE *fp,*slownik;
   char liniatekstu[50];
   
   if ((fp=fopen("test.txt","r"))==NULL)
   {
     printf ("Nie mogę otworzyć pliku test.txt do zapisu!\n");
   }
   
   if ((slownik=fopen("slownik.txt","r"))==NULL)
   {
     printf ("Nie mogę otworzyć pliku slownik.txt do zapisu!\n");
   }
   
    char **tab = (char**) malloc(100*sizeof(char*));   // tworzymy tablice na 10 napisow
	int i;
	for(i = 0; i < 100; i++)
	{
		tab[i] = (char*) malloc(10*sizeof(char));       // tworzymy napis 10 znakowy
		tab[i][0] = 0;     // czysci smieci
	}
	
	char *token; 
	int k = 0;
	char c; // pobierana litera z pliku test.txt
	char slowo[1000]; // utworzone w koncu slowo
	int idx = 0; // index do slowa

	while (fscanf(slownik,"%s",&liniatekstu) == 1)
	{
		k = 0;
		token = strtok(liniatekstu," ,.:");
		
		while(token != NULL)
		{
		  // tab2[k] = token[0];
		   tab[k] = token;
		   //printf("%s\n", tab[k]);
		   token = strtok(NULL," ,.:");
		   k = k + 1;
		}	
		
		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");
				}
			}
			else 
			{
				slowo[idx] = 0;
				//printf("%s\n", slowo);
				char* slowopolskie = tab[0];
				char* slowoangielskie = tab[1];
				
				if ( strcmp(slowo,slowopolskie)  == 0)
				{
					printf("%s ",slowoangielskie);
				}
				else
				{
					printf("%s ",slowo);
				}
				
				idx = 0;
		     }
		} 
	}  
  free (tab);
  fclose(slownik);  
  fclose (fp);   
   getchar();
}
0

Problem z tego co widzę jest taki:

  • Wykonuje się pętla z tokenami gdzie odczytywana jest 1 linijka z pliku slownik.txt
  • Po odczytaniu program przechodzi do drugiej pętli gdzie czyta cały plik test.txt.
    • Program zbiera słowo do bufora slowo, gdy napotka spację przechodzi do else gdzie słowo zamieniane jest na angielski odpowiednik.
    • Za ostatnim wyrazem nie ma spacji więc wyraz zostaje pominięty
  • Po skończeniu czytania z pliku program wraca do pętli z tokenami, bierze następne słowo tylko że tym razem warunek !feof(fp) jest już nieprawdziwy i ta pętla się już nie wykona.

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