elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Ayuda ordenar y eliminar palabras texto en: 15 Diciembre 2012, 18:18 pm
Hola soy nuevo en el foro y quisiera ver si me pueden ayudar con este programa... lo que hace es dado un texto ingresado muestra la cantidad de ocurrencias que tiene cada palabra, pero las muestra desordenadas, por ejemplo "hola amigo que que" ... la salida seria:
hola->1
amigo->1
que->2
como puedo hacer para que me los muestre ordenados de mayor a menor en numero de ocurrencias?
y otra duda.. como puedo hacer para eliminar la mas baja o las mas bajas?

Gracias de antemano, aqui esta mi codigo:

Código:
/*
   Recibe una cadena y devuelve las palabras de dicha cadena.
   Los espacios y saltos de linea son los separadores entre palabras.
*/
void separador(char renglon[80], char palabras[100][80], int *total)
{
   int i, j=0;

   for(i=0; i<strlen(renglon); i++)
   {
       /* Si es un caracter distinto de espacio y salto de linea */
       if(renglon[i]!=' ' && renglon[i]!='\n')
       {
  palabras[*total][j] = renglon[i];
  j++;

          /* Si el caracter siguiente es fin de cadena */
          if(renglon[i+1]=='\0')
  {
     palabras[*total][j] = '\0'; /* Indica fin de palabra */
     *total = *total+1; /* Aumenta el numero de palabras */
     j=0;
  }
       }
       /* Si es espacio o salto de linea */
       else if(renglon[i]==' ' || renglon[i]=='\n')
       {
  /* Si el caracter anterior no es espacio ni salto de linea */
  if(i>0 && renglon[i-1]!=' ' && renglon[i-1]!='\n')
  {
     palabras[*total][j] = '\0'; /* Indica fin de palabra */
     *total = *total+1; /* Aumenta el numero de palabras */
     j=0;
  }
       }
   }
}


void ocurrencias(char nombre_archivo[100])
{
   char renglon[80];
   char palabras[100][80]; /* Todas las palabras */
   char palabras_diferentes[100][80]; /* Solo palabras diferentes */
   int i, j, k, total=0 /* Numero total de palabras*/,
   diferentes=0 /* Numero de palabras diferentes */;
   int Rep[100]; /* Repeticiones de cada palabra diferente */

   FILE *archivo;

   archivo=fopen(nombre_archivo,"r");

   if(archivo==NULL)
   {
      printf("No se encuentra archivo: %s\n", nombre_archivo);
      return ;
   }

   /* Lee el archivo linea a linea y obtiene las palabras de esa linea */
   while(fgets(renglon,80,archivo))
   {
       separador(renglon,palabras, &total);
   }

   fclose(archivo);

   /* Saca copia del arreglo original */
   for(i=0; i<total; i++)
       strcpy(palabras_diferentes[i], palabras[i]);

   /* Saca palabras diferentes */
   diferentes = total;
   for(i=0;i<diferentes;i++)
   {
      for(j=i+1;j<diferentes;j++)
      {
  /* Si encuentra palabra repetida */
  if(!strcmp(palabras_diferentes[i], palabras_diferentes[j]))
  {
     /* Recorre una posicion elementos posteriores */
     for(k=j+1;k<diferentes;k++)
strcpy(palabras_diferentes[k-1], palabras_diferentes[k]);

     diferentes--;
     j--;
  }
       }
   }

   /* haya repeticiones de cada palabra distinta */
   for(i=0; i<diferentes; i++)
       Rep[i] = 0;
   for(i=0; i<diferentes; i++)
       for(j=0;j<total;j++)
  if(!strcmp(palabras_diferentes[i], palabras[j]))
     Rep[i]++;

   /* Muestra informacion */
   printf("Palabras y numero de ocurrencias del archivo: %s\n\n", nombre_archivo);
   printf("Total de palabras: %d\n", total);
   printf("Palabras distintas: %d\n\n", diferentes);

   for(i=0; i<diferentes; i++)
       printf("%s -> %d\n", palabras_diferentes[i], Rep[i]);
}
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines