Zamiana w tekscie

Odpowiedz Nowy wątek
2018-01-22 16:56

Rejestracja: 2 lata temu

Ostatnio: 1 rok temu

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:

#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();
}

Pozostało 580 znaków

2018-01-22 17:29

Rejestracja: 5 lat temu

Ostatnio: 11 godzin temu

Lokalizacja: Łódź

0
char **tab = (char**) malloc(2*sizeof(char*));   // tworzymy tablice na 10 napisow

nie prawda, rezerwujesz pamiec na 2 elementy

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

nieprawda, tworzysz miejsce na 2 znaki

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ć...


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie

Pozostało 580 znaków

2018-01-22 17:46

Rejestracja: 2 lata temu

Ostatnio: 1 rok temu

0

No to takim razie jak to rozwiązać?

Pozostało 580 znaków

2018-01-22 20:38

Rejestracja: 5 lat temu

Ostatnio: 11 godzin temu

Lokalizacja: Łódź

0

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


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie

Pozostało 580 znaków

Odpowiedz

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