projet.c
1.95 KB
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
struct cell {
int stop;
struct cell * liste[26];
};
int num(char c){
int x;
x=c;
if (x>96 && x<123){x=x-97;}
if (x>64 && x<91) {x=x-65;}
return x;
}
int ajout_mot(struct cell ** d,char * m){
char c;
struct cell **tmp1 , *tmp2 ;
int x=0;
if (*d==NULL){return EXIT_FAILURE;}
tmp1=d;
c=m[x];
while (c != '\0'){
//printf("%c",c);
if ((*tmp1)->liste[num(c)]==NULL){
tmp2=malloc(sizeof(struct cell));
(*tmp1)->liste[num(c)]=tmp2;
}
tmp1=&((*tmp1)->liste[num(c)]);
x++;
c=m[x];
}
(*tmp1)->stop=1;
//printf("\n");
return 1;
}
void creation_dico(FILE *fd, struct cell **d){
char s[20];
while (fscanf(fd,"%s",s)==1){
ajout_mot(d,s);
}
}
int reconaissance(struct cell * d,char * m){
char c;
struct cell *tmp1;
int x=0;
tmp1=d;
if (d==NULL){return 1;}
c=m[x];
while (c != '\0' && c != ' ' && c!= '.' && c != ':' && c != ',' && c != '?' && c != ';'){
if (tmp1->liste[num(c)]==NULL){return 1;}
tmp1=(tmp1->liste[num(c)]);
x++;
c=m[x];
}
if (tmp1->stop==1) {return 0;}
return 1;
}
int lecture(FILE *fd, struct cell *d){
char s[20];
int cmpt=0;
int x;
while (fscanf(fd,"%s",s)==1){
x=reconaissance(d,s);
cmpt+=x;
if(x==1){printf("%s \n",s);}
}
return cmpt;
}
int main(int argc, char *argv[])
{
if (argc < 3)
{
fprintf(stderr, "usage: hash <file_name>\n");
return EXIT_FAILURE;
}
FILE *fp;
printf("%s\n",argv[1]);
fp=fopen(argv[1], "r");
if (fp==NULL)
{
fprintf(stderr, "no such file, or unreachable: %s\n", argv[1]);
return EXIT_FAILURE;
}
FILE *fd;
printf("%s\n",argv[2]);
fd=fopen(argv[2], "r");
if (fd==NULL)
{
fprintf(stderr, "no such file, or unreachable: %s\n", argv[2]);
return EXIT_FAILURE;
}
struct cell *d;
d=malloc(sizeof(struct cell));
creation_dico(fp,&d);
int inc;
inc=lecture(fd,d);
printf("%d mots non reconnus", inc);
}