Ciao avrei anche questo algoritmo da risolvere:
Sii considera una cartella di corrispondenze contenuta in un file in cui ogni riga contiene la corrispondenza nella forma [<carattere originale>] [<carattere sostituito>]. I soli caratteri possibili sono l'alfabeto minuscolo.
ad es
[a]
[k]
[c] [m]
Devo scrivere una funzione che prende come parametri il nome di un file di corrispondenze, una stringa da decifrare e una stringa che conterrà il testo cifrato. La funzione dovrà scrivere nella seconda stringa il contenuto della prima decifrato il base alle corrispondenze contenute nel file.
Io ho svolto il problema in questo modo (ovviamente credo che non sia corretto).
Qualche osservazione?
#include <stdio.h>
#include <string.h>
#define DIM 5
#define DIM_MAX 100
struct Cifratura{
char originale[DIM];
char cifrato[DIM];
};
void ConvertiStringa(char nome_file, char originale[], char cifrato[]);
void ConvertiCarattere(struct Cifratura v[], char originale[], char cifrato[]);
int main(int argc, char* argv[]){
char stringa_cifrata[DIM_MAX];
ConvertiStringa(argv[1], argv[2], stringa_cifrata);
printf("La stringa tradotta: %s\n", stringa_cifrata);
return 0;
}
void ConvertiStringa(char nome_file, char originale[], char cifrato[]){
FILE *fp;
int i, j;
struct Cifratura v[DIM_MAX];
char car_or[DIM], car_cif[DIM];
char cifrato[DIM_MAX];
fp=fopen(nome_file, "r");
if(!fp)
printf("Errore lettura file!\n");
return -1;
while(fscanf(fp,"%*s%s%*s %*s%s%*s", car_or, car_cif)!=EOF);
fp=fclose;
i=0;
j=0;
while(car_or[i]!='\0'){
v[j].originale=car_or[i];
v[j].cifrato=car_cif[i];
i++;
j++;
}
i=0;
while(car_or[i]!=0){
cifrato[i]=ConvertiCarattere(v, originale, cifrato);
i++;
} cifrato[i]='\0';
}
void ConvertiCarattere(struct Cifratura v[], char originale[], char cifrato[]){
int i=0;
while(strcmp(v[i].originale, originale)!=0){
continue;
strcpy(cifrato, v[i].cifrato);
i++;
}
return;
}