95 lines
2.0 KiB
C
95 lines
2.0 KiB
C
// Laboratorio 5 - Esercizio 2
|
|
// Matteo Schiff - s295565
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stdbool.h>
|
|
#define MAX_SIZE 30
|
|
#define MAX_LEN 200
|
|
|
|
typedef struct Coppia
|
|
{
|
|
int codice;
|
|
int len;
|
|
char sequenza[MAX_LEN];
|
|
} coppia;
|
|
|
|
int caricaDizionario(coppia coppie[MAX_SIZE], int * c);
|
|
|
|
int caricaDizionario(coppia coppie[MAX_SIZE], int * c) {
|
|
FILE *fp_read;
|
|
|
|
if ((fp_read = fopen("./dizionario.txt", "r")) == NULL)
|
|
{
|
|
printf("Errore nell'apertura del file\n");
|
|
return 1;
|
|
}
|
|
|
|
fscanf(fp_read, "%d\n", c);
|
|
|
|
if (*c >= MAX_SIZE) {
|
|
printf("Troppi elementi nel dizionario");
|
|
fclose(fp_read);
|
|
return 1;
|
|
}
|
|
|
|
for (int i = 0; i < *c; i++) {
|
|
fscanf(fp_read, "$%d$ %200s\n", &coppie[i].codice, coppie[i].sequenza);
|
|
coppie[i].len = strlen(coppie[i].sequenza);
|
|
}
|
|
|
|
fclose(fp_read);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
int main()
|
|
{
|
|
|
|
FILE *fp_read, *fp_write;
|
|
char riga[MAX_LEN], buf[MAX_LEN];
|
|
bool richiedeCiclo;
|
|
int c, w;
|
|
coppia coppie[MAX_SIZE];
|
|
|
|
if (caricaDizionario(coppie, &c)) {
|
|
return 1;
|
|
}
|
|
|
|
if ((fp_read = fopen("./sorgente.txt", "r")) == NULL)
|
|
{
|
|
printf("Errore nell'apertura del file\n");
|
|
return 1;
|
|
}
|
|
if ((fp_write = fopen("./ricodificato.txt", "w")) == NULL)
|
|
{
|
|
printf("Errore nell'apertura del file\n");
|
|
return 2;
|
|
}
|
|
|
|
while (!feof(fp_read)) {
|
|
fgets(riga, 200, fp_read);
|
|
|
|
for (int i = 0; i < c; i++) {
|
|
richiedeCiclo = true;
|
|
while (richiedeCiclo) {
|
|
richiedeCiclo = false;
|
|
char * ptr = strstr(riga, coppie[i].sequenza);
|
|
if (ptr != NULL) {
|
|
strcpy(buf, ptr);
|
|
w = sprintf(ptr, "$%d$", coppie[i].codice);
|
|
strcpy(ptr + w, buf + coppie[i].len);
|
|
richiedeCiclo = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
fprintf(fp_write, "%s", riga);
|
|
}
|
|
|
|
fclose(fp_read);
|
|
fclose(fp_write);
|
|
|
|
return 0;
|
|
} |