Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/08/2015, 04:29
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Ordenar cantidad de repeticion de caracteres

Si pretendes ordenar el resultado en función del número de apariciones... primero tienes que calcular el número de apariciones de cada caracter...

Para eso necesitas un array de tipo int de 256 posiciones... conveniente inicializado a 0. Entonces iteras sobre la cadena y, para cada caracter, incrementas el valor que le corresponda a cada caracter:

Código C:
Ver original
  1. int apariciones[256]; // hay que inicializarlo
  2. char* puntero;
  3. for( puntero = texto; *puntero; ++puntero )
  4.   apariciones[ *puntero ]++;

Si prefieres usar otro algoritmo para recorrer la cadena eres libre de modificar el código.

Bueno, al lío. Una vez tienes calculadas el total de apariciones tienes que presentar los resultados ordenados. Si intentas ordenar esos números tal cual tendrás un problema y es que una vez ordenados no tendrás forma de saber a qué caracter se corresponde cada resultado.

En este punto deberías plantearte guardar los datos de forma diferente... quizás en una estructura para poder mantener el par caracter-apariciones. Algo del estilo:

Código C:
Ver original
  1. struct pareja
  2. {
  3.   char caracter;
  4.   int apariciones;
  5. };

Entonces podrías crear un array estático y ordenarlo a conveniencia:

Código C:
Ver original
  1. struct pareja elementos[256];

Para ordenar los elementos no olvides usar una variable temporal:

Código C:
Ver original
  1. struct pareja temporal = elementos[3];
  2. elementos[3] = elementos[5];
  3. elementos[5] = temporal;

Otra opción es hacer uso de una lista enlazada. Para no modificar la estructura puedes anidarlas:

Código C:
Ver original
  1. struct Nodo
  2. {
  3.   struct Nodo* siguiente;
  4.   struct pareja datos;
  5. };

Entonces, haciendo uso de malloc (o calloc, como prefieras) para reservar memoria y de free para liberarla posteriormente puedes ir componiendo la lista de elementos.

Y poco más que contar, lo primero que tienes que hacer es decantarte por una forma en concreto, después pegarte con esa solución y luego pasarte por aquí si tienes nuevas dudas.

Ah si, por favor te lo pido... antes de enviar un mensaje al foro invierte un par de minutos en leerlo y corregir las faltas de ortografia y demás errores gramaticales. Además, si apañas el texto para que tenga sentido mejor que mejor.

Un saludo.