projet.c 1.95 KB
#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);
}