feat: Initial commit
This commit is contained in:
95
Laboratorio 5/ricodifica.c
Normal file
95
Laboratorio 5/ricodifica.c
Normal file
@@ -0,0 +1,95 @@
|
||||
// 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;
|
||||
}
|
||||
Reference in New Issue
Block a user