#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_RIGHE 100
#define MAX_CHAR 100

void eliminarighevuote(char testo[MAX_RIGHE][MAX_CHAR], int *righe);
void righeuguali(char testo1[MAX_RIGHE][MAX_CHAR], char testo2[MAX_RIGHE][MAX_CHAR], int righe1, int righe2);
void contaparole(char riga1[], char riga2[]);

int main (){
    int righe1, righe2;
  	char testo1[MAX_RIGHE][MAX_CHAR];
  	char testo2[MAX_RIGHE][MAX_CHAR];
    int i;
  	FILE *pf1;
  	FILE *pf2;

  	pf1 = fopen("testo1.txt", "r");
  	pf2 = fopen("testo2.txt", "r");

    righe1 = 0;
    while (fgets(testo1[righe1],100,pf1) != NULL) {
      righe1++;
    }

    righe2 = 0;
    while (fgets(testo2[righe2],100,pf2) != NULL) {
      righe2++;
    }
    fclose(pf1);
  	fclose(pf2);
    eliminarighevuote(testo1, &righe1);
    eliminarighevuote(testo2, &righe2);

    righeuguali(testo1, testo2, righe1, righe2);
    for(i=0;i<righe1;i++){
      contaparole(testo1[i], testo2[i]);
    }
}

void eliminarighevuote(char testo[MAX_RIGHE][MAX_CHAR], int *righe){
  //ELIMINA RIGHE VUOTE
  int i,j;
  int count = 0;
  char temp[MAX_CHAR];

  for(j=0;j<*righe;j++){
    if (!strcmp(testo[j],"\n")) {
      for(i=j;i<*righe-1;i++){
        strcpy(temp,testo[i]);
        strcpy(testo[i],testo[i+1]);
        strcpy(testo[i+1],temp);
      }
      *righe = *righe - 1;
      count++;
    }
  }

  if (count!=0) {
    printf("Eliminate %d righe vuote:\n", count );
    for(j=0;j<*righe;j++){
      printf("%s", testo[j]);
    }
  }
  else{
    printf("Non ci sono righe vuote\n" );
  }

}
void righeuguali(char testo1[MAX_RIGHE][MAX_CHAR], char testo2[MAX_RIGHE][MAX_CHAR], int righe1, int righe2){
  //CONTA RIGHE UGUALI - Aggiungere controllo lunghezza testo
  int i,j;
  int righeuguali = 0;
  for(i=0;i<righe1;i++){
    for(j=0;j<righe2;j++){
      if(!strcmp(testo1[i],testo2[j])){
        printf("Righe uguali:\n%s\t%s\n", testo1[i], testo2[i] );
        righeuguali++;
      }
    }
  }
  printf("Le righe uguali sono: %d\n", righeuguali );
}

void contaparole(char riga1[], char riga2[]){
  //CONTA PAROLE
  char *pch1, *pch2;
  char listaparole1[10][150], listaparole2[10][150];
  int contaparole1 = 0;
  int contaparole2 = 0;
  int contaparoleuguali = 0;
  int i,j;

  pch1 = strtok(&riga1[0]," ");
  while (pch1 != NULL){
    strcpy(listaparole1[contaparole1],pch1);
    contaparole1++;
    pch1 = strtok (NULL, " ");
  }

  pch2 = strtok(&riga2[0]," ");
  while (pch2 != NULL) {
    strcpy(listaparole2[contaparole2],pch2);
    contaparole2++;
    pch2 = strtok (NULL, " ");
  }

  for(i=0;i<contaparole2;i++){
    for(j=0;j<contaparole1;j++){
        if(!strcmp(listaparole1[j],listaparole2[i])){
          //printf("Trovata parola uguale\n");
          contaparoleuguali++;
        }
    }
  }
  printf("N. Parole = %d\t Parole Uguali: %d\n", contaparole1, contaparoleuguali);

}