1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_MOT_TAILLE 100
#define MAX_DICTIONNAIRE_TAILLE 100
typedef struct {
char mot_fr[MAX_MOT_TAILLE];
char mot_it[MAX_MOT_TAILLE];
} DictionnaireElement;
DictionnaireElement* lire_dictionnaire(char* nom_fichier, int* taille) {
FILE* fichier = fopen(nom_fichier, "r");
if (fichier == NULL) {
printf("Erreur lors de l'ouverture du fichier %s.\n", nom_fichier);
exit(1);
}
DictionnaireElement* dictionnaire = malloc(MAX_DICTIONNAIRE_TAILLE * sizeof(DictionnaireElement));
if (dictionnaire == NULL) {
printf("Erreur lors de l'allocation de mémoire.\n");
exit(1);
}
*taille = 0;
char ligne[MAX_MOT_TAILLE * 2];
while (fgets(ligne, sizeof(ligne), fichier) != NULL && *taille < MAX_DICTIONNAIRE_TAILLE) {
char mot_fr[MAX_MOT_TAILLE], mot_it[MAX_MOT_TAILLE];
if (sscanf(ligne, "%99[^-] - %99[^\n]", mot_fr, mot_it) == 2) {
strcpy(dictionnaire[*taille].mot_fr, mot_fr);
strcpy(dictionnaire[*taille].mot_it, mot_it);
(*taille)++;
} else {
printf("Erreur de lecture de la ligne du dictionnaire.\n");
}
}
fclose(fichier);
return dictionnaire;
}
char* traduire_texte(char* texte, DictionnaireElement* dictionnaire, int taille) {
char* mots = strtok(texte, " ");
char* texte_traduit = malloc(MAX_MOT_TAILLE * 100);
texte_traduit[0] = '\0';
while (mots != NULL) {
// Convert the current word to lowercase
for (int j = 0; mots[j]; j++) {
mots[j] = tolower(mots[j]);
}
int traduit = 0;
for (int i = 0; i < taille; i++) {
if (strcasecmp(mots, dictionnaire[i].mot_fr) == 0) {
strcat(texte_traduit, dictionnaire[i].mot_it);
strcat(texte_traduit, " ");
traduit = 1;
break;
}
}
if (!traduit) {
strcat(texte_traduit, mots);
strcat(texte_traduit, " ");
}
mots = strtok(NULL, " ");
}
return texte_traduit;
}
int main() {
char nom_fichier_dictionnaire[100];
printf("Entrez le nom du fichier du dictionnaire bilingue : ");
fgets(nom_fichier_dictionnaire, sizeof(nom_fichier_dictionnaire), stdin);
nom_fichier_dictionnaire[strcspn(nom_fichier_dictionnaire, "\n")] = '\0';
int taille_dictionnaire;
DictionnaireElement* dictionnaire = lire_dictionnaire(nom_fichier_dictionnaire, &taille_dictionnaire);
while (1) {
char texte_a_traduire[MAX_MOT_TAILLE * 100];
printf("Entrez le texte à traduire en français (ou 'sortir' pour quitter) : ");
fgets(texte_a_traduire, sizeof(texte_a_traduire), stdin);
texte_a_traduire[strcspn(texte_a_traduire, "\n")] = '\0'; // Removing newline character
if (strcmp(texte_a_traduire, "sortir") == 0) {
printf("Au revoir!\n");
break;
}
char* texte_traduit = traduire_texte(texte_a_traduire, dictionnaire, taille_dictionnaire);
printf("Texte traduit en italien: %s\n\n", texte_traduit);
free(texte_traduit);
}
free(dictionnaire);
return 0;
} |
Partager