Advertisement
GatoBooster

MODULO 4 Lab

Nov 17th, 2017
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.49 KB | None | 0 0
  1. typedef struct {
  2.     char mail[321];
  3.     int cont;
  4. }Correo;
  5.  
  6. int comparar(const void *cadena1, const void *cadena2) {
  7.    
  8.    Correo *puntero1 = (Correo *) cadena1;
  9.    Correo *puntero2 = (Correo *) cadena2;
  10.    
  11.    if(strcmp(puntero1 -> mail, puntero2 -> mail) > 0){
  12.        return 1;
  13.    }else{
  14.        return 0;
  15.    }
  16. }
  17.  
  18.  
  19. void dominiosYFrecuencia(FILE *entrada,FILE **salida){
  20.    
  21.     Correo *correo;
  22.     char cadena[321] = {};
  23.     char cadena2[256] = {};
  24.     int i, j = 0, pos, largo, total = 0, flag;
  25.     Correo aux;
  26.     correo = (Correo*) malloc (sizeof(Correo));
  27.     if(correo == NULL){
  28.         exit(0);
  29.     }
  30.    
  31.     while(fscanf(entrada,"%s",cadena) != EOF){
  32.         pos = 0;
  33.         largo = (int)strlen(cadena);
  34.        
  35.         //Ubicar la posicion del '@'
  36.         do{  
  37.             if(cadena[pos] == '@'){
  38.                 pos++;
  39.                 break;
  40.             }
  41.             pos++;
  42.         }while(pos < largo);
  43.        
  44.         //Se pasa a minuscula la cadena
  45.         for(i = 0; i < largo; i++){
  46.             cadena[i] = tolower(cadena[i]);
  47.         }
  48.        
  49.         //Guardo SOLO los dominios en cadena2
  50.         j=0;
  51.         for(i = pos; i < largo; i++){
  52.             cadena2[j] = cadena[i];
  53.             j++;    
  54.         }
  55.        
  56.         flag = 0;
  57.        
  58.         //Reviso si el domino ya se encontraba en el vector
  59.        
  60.         for(i = 0; i < total; i++){
  61.             if((strcmp(cadena2, correo[i].mail)) == 0){
  62.                 flag = 1;
  63.                 correo[i].cont += 1;
  64.                 break;
  65.             }
  66.         }
  67.        
  68.         //Guardar la nueva cadena
  69.         if(flag == 0){
  70.             strcpy( correo[total].mail, cadena2);
  71.             correo[total].cont += 1;
  72.             total++;
  73.             correo = (Correo*) realloc (correo, (total+1)*sizeof(Correo));
  74.         }
  75.        
  76.         //Limpiar la cadena2
  77.         largo = (int)strlen(cadena2);
  78.         for(i = 0; i < largo; i++){
  79.             cadena2[i] = '\0';
  80.         }
  81.     }
  82.     //Se ordena usando qsort
  83.    
  84.     qsort(correo, total, sizeof(Correo), &comparar);
  85.    
  86.     for(i = 0; i < total; i++){
  87.         for(j = i+1; j < total; j++){
  88.             if(correo[i].cont < correo[j].cont){
  89.             aux = correo[i];
  90.             correo[i] = correo[j];
  91.             correo[j] = aux;
  92.             }
  93.         }
  94.     }
  95.    
  96.        
  97.     //Se Imprimen los datos ordenados
  98.     for(i = 0; i < total; i++){
  99.         printf("%s %d\n", correo[i].mail, correo[i].cont);
  100.     }
  101.    
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement