Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define NULA -1
- typedef long long int ll_i;
- typedef struct Datos{
- char palabra[41];
- ll_i coincidencias;
- ll_i largo_total;
- }Datos;
- int esFrase (char *frase){
- ll_i largo = strlen(frase);
- ll_i i;
- for (i = 0 ; i < largo ; i++){
- if (!isalpha(frase[i])) return 0;
- }
- return 1;
- }
- ll_i buscar(Datos *vector, ll_i tamano, char *clave){
- ll_i i;
- for (i = 0 ; i < tamano ; i++){
- if ( (strcmp(vector[i].palabra , clave)) == 0)
- return i;
- }
- return NULA;
- }
- int compararLargoTotal(const void *a, const void *b){
- Datos * pA = (Datos *) a;
- Datos * pB = (Datos *) b;
- if (pA->largo_total > pB->largo_total) return 1;
- else return 0;
- }
- int compararAlfa(const void *a, const void *b){
- Datos * pA = (Datos *) a;
- Datos * pB = (Datos *) b;
- if ((strcmp(pA->palabra , pB->palabra)) > 0)
- return 1;
- else
- return 0;
- }
- void nubeDePalabras(FILE *entrada){
- char aux[41];
- Datos *vector = NULL;
- ll_i cant_palabras = 0;
- ll_i i;
- ll_i pos;
- while ((fscanf(entrada,"%s",aux))!= EOF){
- if (esFrase(aux)){
- ll_i largo = strlen(aux);
- for (i = 0 ; i < largo ; i++){
- aux[i] = toupper(aux[i]);
- }
- pos = buscar(vector,cant_palabras,aux);
- if (pos == NULA){
- vector = (Datos *)realloc(vector , sizeof(Datos)*(cant_palabras + 1));
- strcpy(vector[cant_palabras].palabra , aux);
- vector[cant_palabras].coincidencias = 1;
- cant_palabras++;
- }
- else{
- vector[pos].coincidencias++;
- }
- }
- }
- for (i = 0 ; i < cant_palabras ; i++){
- vector[i].largo_total = vector[i].coincidencias * strlen(vector[i].palabra);
- }
- qsort(vector,cant_palabras,sizeof(Datos),compararAlfa);
- qsort(vector,cant_palabras,sizeof(Datos),compararLargoTotal);
- /*
- for (i = 0 ; i < cant_palabras ; i++){
- printf("%s ",vector[i].palabra);
- printf("%lli ",vector[i].coincidencias);
- printf("%lli\n",vector[i].largo_total);
- }
- */
- ll_i diferencia_largo;
- ll_i j,k;
- for (i = 0 ; i < cant_palabras ; i++){
- diferencia_largo = vector[cant_palabras-1].largo_total - vector[i].largo_total;
- if (diferencia_largo != 1){
- diferencia_largo /= 2;
- for (k = 0 ; k < diferencia_largo ; k++){
- printf(" ");
- }
- }
- else{
- printf(" ");
- }
- for (j = 0 ; j < vector[i].coincidencias ; j++){
- printf("%s",vector[i].palabra);
- }
- if (i != (cant_palabras -1))
- puts("");
- }
- for (i = cant_palabras ; i >= 0 ; i--){
- diferencia_largo = vector[cant_palabras-1].largo_total - vector[i].largo_total;
- if (diferencia_largo != 1){
- diferencia_largo /= 2;
- for (k = 0 ; k < diferencia_largo ; k++){
- printf(" ");
- }
- }
- else{
- printf(" ");
- }
- for (j = 0 ; j < vector[i].coincidencias ; j++){
- printf("%s",vector[i].palabra);
- }
- if (i != (cant_palabras + 1))
- puts("");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement