compare.c 1.64 KB
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include "tree.h"

bool caractere_stop(char c)
{
  return(c==',' || c=='.' || c=='!' || c=='?'||c==':'|| c== 39);
}


void compare(cell *pliste1,char mot[],int *fautes){
  cell *pliste;
  int lettre,i=0;
  bool fin_mot;
  pliste = pliste1;
  
  if(pliste == NULL){
    printf("\nL'arbre est vide\n");
    return;//si l'arbre est vide, la comparaison s'arrête.
  }
  
  while(mot[i]!='\0'){
    lettre = mot[i];
    while(pliste != NULL && pliste->lettre != lettre){//tant que la lettre n'est pas trouvée dans la liste correspondant à sont rang, on continue l'analyse dans la liste.
      pliste=pliste->suivant;
    }
    
    if(pliste == NULL){
      printf("\nErreur : %s",mot);
      (*fautes)++;//si la lettre n'est pas trouvée dans la liste, on affiche une erreur sur le mot analysé
      break;
    }
    
    fin_mot = pliste->fin_mot;
    pliste = pliste->fils;
    i++;
    
  }
  
  if(!fin_mot && (mot[i]=='\0')){
    printf("\nErreur : %s",mot);//si le mot analysé est trop court par rapport aux mots correspondant dans le dictionnaire, on affiche une erreur.
    (*fautes)++;
    return;
    
  }
  
}



void lecture_mot(cell *pliste,FILE *fichier,int *fautes)
{
  char mot[MAX];
  int longueur;
  while(1)
    {
      if(fscanf(fichier, "%s", mot)!=1)
	break;
      longueur=strlen(mot);
      for(int i=0; i<longueur; i++)//récupération de chaque caractère d'un mot dans un tableau.
	{
	  if(caractere_stop(mot[i]))
	    {
	      mot[i] = '\0';
	      break;
	    }
	}
      compare(pliste, mot,fautes);//comparaison du mot récupéré par rapport au dictionnaire
    }
}