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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
| #include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
typedef struct link link;
struct link
{
char nom[30];
int nbOccur; // nombre d'incrémentation de la chaîne
link *suivant;
};
link* trouve(char CH[30], link *tete)
{
link *ptr = tete;
while(ptr != NULL && !strcmp(ptr->nom, CH))
ptr=ptr->suivant;
return ptr;
}
link* insertQueue(char CH[30], link *tete)
{
link *newLink = NULL;
link *ptr = tete;
if (ptr!= NULL)
while(ptr->suivant != NULL )
ptr=ptr->suivant;
newLink=(link*)malloc(sizeof(link));
newLink->suivant = NULL;
strcpy(newLink->nom, CH);
newLink->nbOccur = 1;
if (ptr!= NULL)
{
ptr->suivant = newLink;
return tete;
}
else
return newLink;
}
void createNewFile(link *tete)
{
FILE *fichier = NULL;
link *ptr = tete;
fichier = fopen("index.txt", "w+");
if(fichier != NULL)
{
while(ptr != NULL)
{
fprintf(fichier, "%s\t\t%d\n", ptr->nom, ptr->nbOccur);
ptr = ptr->suivant;
}
fclose(fichier);
}
}
void affichNewFile()
{
FILE *fichier = NULL;
int caractereActuel = 0;
fichier = fopen("index.txt", "r");
if(fichier != NULL)
{
do
{
caractereActuel = getc(fichier);
printf("%c", caractereActuel);
}
while(caractereActuel != EOF);
}
}
int main(int argc, char *argv[])
{
link *tete = NULL; // Tête de liste
link *mot = tete; // parcours de la liste de chaînes
FILE *fichier = NULL; // Pointeur sur fichier à traîter
int caractereActuel = 0; // Caractère en cours de traitement
char chaineEnCours[30] = "\0"; // Chaîne en cours de formation
char carac[2] = " " ; // Sert pour la convertion d'un caractère en chaîne
char path[50]; // Path du fichier à traîter
printf("Chemin du fichier a traiter : ");
gets(path);
fichier = fopen(path, "r");
if (fichier != NULL)
{
// Boucle de lecture des caractères un à un
do
{
caractereActuel = fgetc(fichier);
if(isspace(caractereActuel) || caractereActuel=='.' || caractereActuel==',' || caractereActuel==';' || caractereActuel=='?' || caractereActuel=='!' || caractereActuel==':' || strcmp(chaineEnCours, "\0"))
{
mot = trouve(chaineEnCours, tete);
if(mot != NULL)
{
mot->nbOccur = mot->nbOccur + 1;
mot = NULL;
}
else
tete = insertQueue(chaineEnCours, tete);
strcpy(chaineEnCours, "\0");
}
else
{
carac[0] = (char)caractereActuel;
carac[1] = '\0';
strcat(chaineEnCours, carac);
}
} while (caractereActuel != EOF); // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
fclose(fichier);
}
else
printf("Impossible d'ouvrir le fichier %s!", path);
createNewFile(tete);
affichNewFile();
free(mot);
free(tete);
return 0;
} |
Partager