Zamiana w tekscie

H2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0

Witam. Mam do napisania program w języku C, który będzie zamieniał słowa w tekście zgodnie ze słownikiem w innym pliku.
Np w pliku: "slownik.txt" mamy:

mama:mother,
tata:father,
babcia:grandma

A w pliku "test.txt":

mama poszla z babcia na zakupy

A więc wynikowo powinno być mother poszla z grandma na zakupy, a to nie działa bo nic nie dopisuje ani nie zamienia w pliku test.txt. Oto kod:

Kopiuj
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int _tmain(int argc, _TCHAR* argv[])
{
   FILE *fp,*slownik;
   char liniatekstu[20];
   
   if ((fp=fopen("test.txt","a"))==NULL)
   {
     printf ("Nie mogę otworzyć pliku test.txt do zapisu!\n");
   }

   if ((slownik=fopen("slownik.txt","r"))==NULL)
   {
     printf ("Nie mogę otworzyć pliku test.txt do zapisu!\n");
   }

   char **tab = (char**) malloc(2*sizeof(char*));   // tworzymy tablice na 10 napisow
	int i;
	for(i = 0; i < 2; i++)
	{
		tab[i] = (char*) malloc(2*sizeof(char));       // tworzymy napis 
		tab[i][0] = 0;     // czysci smieci
	}
   fscanf(slownik,"%s",&liniatekstu);
   char slowo[30];
   char *token;
   token = strtok(liniatekstu," ,.:");
   int k = 0;
   while(token != NULL)
   {
	 printf("%s\n", token);
	 tab[k] = token;
	 token = strtok(NULL," ,.:");
	 k = k + 1;
   }
   while(!feof(fp))
   {
	   fscanf(fp,"%s",&slowo);
	   printf("%s",slowo);
	   const char* x = tab[0];
	   const char* y = tab[1];
	   if ( strcmp(slowo,x)  == 0)
	   {
		   fputs(y,fp);
		   //fprintf(fp,"%s",y);
	   }	 
   }   
   fclose (fp);
   getchar();
}
kaczus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 1403
0
Kopiuj
char **tab = (char**) malloc(2*sizeof(char*));   // tworzymy tablice na 10 napisow

nie prawda, rezerwujesz pamiec na 2 elementy

Kopiuj
tab[i] = (char*) malloc(2*sizeof(char));       // tworzymy napis 

nieprawda, tworzysz miejsce na 2 znaki

Kopiuj
fscanf(slownik,"%s",&liniatekstu); 

przypadkowo zadziała, ale tylko przypadkowo

Między innymi dlatego nie działa (pomijam fakt, że pamięć nie jest zwalniana)

Pomijam fakt, że tu jest kilka fragmentow przypadkowo połączonych programów.... Taka metoda pozwoli tylko przypadkiem zadziałać...

H2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0

No to takim razie jak to rozwiązać?

kaczus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 1403
0

Nauczyć sie tego co było na zajęciach, zrozumieć, a później napisać raz jeszcze, już wtedy samodzielnie, ew z drobną pomocą...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.