Advertisement
Guest User

sadsadsad

a guest
Nov 20th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.47 KB | None | 0 0
  1. #define NULA -1
  2. typedef long long int ll_i;
  3.  
  4. typedef struct Datos{
  5.     char palabra[41];
  6.     ll_i coincidencias;
  7.     ll_i largo_total;
  8. }Datos;
  9.  
  10. int esFrase (char *frase){
  11.     ll_i largo = strlen(frase);
  12.     ll_i i;
  13.    
  14.     for (i = 0 ; i < largo ; i++){
  15.         if (!isalpha(frase[i])) return 0;
  16.     }
  17.     return 1;
  18. }
  19.  
  20. ll_i buscar(Datos *vector, ll_i tamano, char *clave){
  21.    
  22.     ll_i i;
  23.     for (i = 0 ; i < tamano ; i++){
  24.         if ( (strcmp(vector[i].palabra , clave)) == 0)
  25.             return i;
  26.     }
  27.     return NULA;
  28. }
  29.  
  30. int compararLargoTotal(const void *a, const void *b){
  31.     Datos * pA = (Datos *) a;
  32.     Datos * pB = (Datos *) b;
  33.    
  34.     if (pA->largo_total > pB->largo_total) return 1;
  35.     else return 0;
  36. }
  37.  
  38. int compararAlfa(const void *a, const void *b){
  39.     Datos * pA = (Datos *) a;
  40.     Datos * pB = (Datos *) b;
  41.    
  42.     if ((strcmp(pA->palabra , pB->palabra)) > 0)
  43.         return 1;
  44.     else
  45.         return 0;
  46. }
  47.  
  48. void nubeDePalabras(FILE *entrada){
  49.     char aux[41];
  50.     Datos *vector = NULL;
  51.     ll_i cant_palabras = 0;
  52.     ll_i i;
  53.     ll_i pos;
  54.  
  55.     while ((fscanf(entrada,"%s",aux))!= EOF){
  56.  
  57.         if (esFrase(aux)){
  58.  
  59.             ll_i largo = strlen(aux);
  60.        
  61.             for (i = 0 ; i < largo ; i++){
  62.                 aux[i] = toupper(aux[i]);
  63.             }
  64.        
  65.             pos = buscar(vector,cant_palabras,aux);
  66.        
  67.             if (pos == NULA){
  68.                 vector = (Datos *)realloc(vector , sizeof(Datos)*(cant_palabras + 1));
  69.                 strcpy(vector[cant_palabras].palabra , aux);
  70.                 vector[cant_palabras].coincidencias = 1;
  71.                 cant_palabras++;
  72.             }
  73.             else{
  74.                 vector[pos].coincidencias++;
  75.             }
  76.         }
  77.     }
  78.    
  79.     for (i = 0 ; i < cant_palabras ; i++){
  80.         vector[i].largo_total = vector[i].coincidencias * strlen(vector[i].palabra);
  81.     }
  82.    
  83.     qsort(vector,cant_palabras,sizeof(Datos),compararAlfa);
  84.     qsort(vector,cant_palabras,sizeof(Datos),compararLargoTotal);
  85.    
  86.     /*
  87.     for (i = 0 ; i < cant_palabras ; i++){
  88.         printf("%s ",vector[i].palabra);
  89.         printf("%lli ",vector[i].coincidencias);
  90.         printf("%lli\n",vector[i].largo_total);
  91.     }
  92.     */
  93.    
  94.     ll_i diferencia_largo;
  95.     ll_i j,k;
  96.  
  97.     for (i = 0 ; i < cant_palabras ; i++){
  98.        
  99.         diferencia_largo = vector[cant_palabras-1].largo_total - vector[i].largo_total;
  100.        
  101.         if (diferencia_largo != 1){
  102.             diferencia_largo /= 2;
  103.             for (k = 0 ; k < diferencia_largo ; k++){
  104.                 printf(" ");
  105.             }
  106.         }
  107.         else{
  108.             printf(" ");
  109.         }
  110.        
  111.         for (j = 0 ; j < vector[i].coincidencias ; j++){
  112.             printf("%s",vector[i].palabra);
  113.         }
  114.            
  115.         if (i != (cant_palabras -1))
  116.             puts("");
  117.     }
  118.    
  119.     for (i = cant_palabras ; i >= 0 ; i--){
  120.        
  121.         diferencia_largo = vector[cant_palabras-1].largo_total - vector[i].largo_total;
  122.        
  123.         if (diferencia_largo != 1){
  124.             diferencia_largo /= 2;
  125.             for (k = 0 ; k < diferencia_largo ; k++){
  126.                 printf(" ");
  127.             }
  128.         }
  129.         else{
  130.             printf(" ");
  131.         }
  132.        
  133.         for (j = 0 ; j < vector[i].coincidencias ; j++){
  134.             printf("%s",vector[i].palabra);
  135.         }
  136.            
  137.         if (i != (cant_palabras + 1))
  138.             puts("");
  139.     }
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement