Título: Mantener ordenados strings Publicado por: RON06 en 21 Febrero 2011, 14:36 pm Hola a tod@s!
Quiero hacer un programa que lea una serie de strings(palabras) con una marca al final de todo, en este caso la marca es '#'. Cada vez que aparezca un nombre repetido se incrementa en 1 el nombre de apariciones. I si la palabra es nueva, se añade ordenadamente. Es decir, sin añadirla al final y después ordenar antes de mostrar por pantalla. En definitiva, tengo problemas en el momento de añadir ordenadamente. Una muestra de lo que quería que hiciese es esta imagen: (http://img402.imageshack.us/img402/5792/muestraz.png) (http://img402.imageshack.us/i/muestraz.png/) I el codigo que he hecho hasta el momento es el siguiente: Código: #include <iostream> #include <string> using namespace std; // Constantes const int N=2000; const string FIN="#"; //Estructura de nombres struct Nombre { string texto; int veces; }; // Declaración de nuevo tipo typedef Nombre TablaNombres[N]; void insertarOrdenado(TablaNombres nombres, int& n, string p) { //Declaración variables int posicion, compara,compara2,i; bool encontrada; posicion=1; encontrada=false;//indica si ha encontrado la posicion de inserción while ((posicion<=n) and (not encontrada)) { compara=p.compare((nombres[posicion].texto)); if (compara>=0) { encontrada=true; } else { posicion=posicion+1; } } //posicion es la posición de inserción compara2=p.compare((nombres[posicion].texto)); if (compara2==0) { nombres[posicion].veces=nombres[posicion].veces+1; } else { //Añadir nuevo for (i=n;i>=posicion;i--){ nombres[i+1]=nombres[i]; } nombres[posicion].texto=p; nombres[posicion].veces=1; n=n+1; } } void lecturaNombres(TablaNombres nombres, int& n) { //Declaración variables string p; int c; cin >> p; c=p.compare(FIN); //c=0 si son iguales while (c!=0) { insertarOrdenado(nombres,n,p); cin >> p; } } void mostrar(TablaNombres nombres, int n) { //Declaración variables int i; for (i=0; i<n; i++) { cout << nombres[i].texto << " - " << nombres[i].veces << endl; } } int main() { // Declaración de variables int n; TablaNombres nombres; n=0; cout << "ESCRIBA LOS NOMBRES A PROCESAR" << endl; lecturaNombres(nombres,n); cout << "NOMBRES ORDENADOS ALFABETICAMENTE" << endl; mostrar(nombres,n); return 0; } Al compilar no me sale ningún error ni advertencia, pero al ejecutar, después de introducir los nombres separados por un espacio en blanco y con la marca final '#'. No muestra nada más. El problema deduzco que es en el InsertarOrdenado, está mal planteado o tiene algún bucle infinito. Si alguien me puede ayudar muchas gracias ;D PD: Se acceptan propuestas de cambios en la manera de estructurar el problema o sugerencias de como solucionarlo. Revisando días después he visto los errores ::) |