Título: Ayuda ordenar y eliminar palabras texto Publicado por: Fire_Hugo12 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: /* Título: Re: Ayuda ordenar y eliminar palabras texto Publicado por: x64core en 16 Diciembre 2012, 06:42 am Tu podrías estar buscando esto:
Ordenamiento burbuja en C++ (http://codigomaldito.blogspot.com/2005/11/ordenamiento-burbuja.html) ordena una lista de enteros podrias hacer un array con las veces que se repiten las palabras, o mejor aún hacer una estructura de este tipo: typedef struct WordInfo { PCHAR lpWord; ULONG nRep; } lpWord, puntero a la palabra. nRep, las veces que se repite la palabra. de esta forma lo tienes mejor ordenado. Título: Re: Ayuda ordenar y eliminar palabras texto Publicado por: naderST en 16 Diciembre 2012, 07:26 am Tu podrías estar buscando esto: Ordenamiento burbuja en C++ (http://codigomaldito.blogspot.com/2005/11/ordenamiento-burbuja.html) ordena una lista de enteros podrias hacer un array con las veces que se repiten las palabras, o mejor aún hacer una estructura de este tipo: typedef struct WordInfo { PCHAR lpWord; ULONG nRep; } lpWord, puntero a la palabra. nRep, las veces que se repite la palabra. de esta forma lo tienes mejor ordenado. Sin ánimos de ofender amigo, considero que lo más correcto es que el código que coloques para este tipo de casos sea código estándar, ya que no sabemos que compilador está utilizando Fire_Hugo12. Por las dudas tenemos que PCHAR es equivalente a un apuntador a caracter (char *) y ULONG es equivalente a un entero largo sin signo (unsigned long int). Con respecto al problema puedes utilizar una lista enlazada e ir insertando de manera ordenada en tu caso de mayor a menor. Para eliminar la más baja o las más bajas vas recorriendo palabra a palabra y comprobando si no es la más baja la concatenas en otra nueva cadena y reduces el contador de dicha palabra, esto lo haces hasta que dicho contador llegue a cero. Título: Re: Ayuda ordenar y eliminar palabras texto Publicado por: x64core en 16 Diciembre 2012, 08:52 am Sin ánimos de ofender amigo, considero que lo más correcto es que el código que coloques para este tipo de casos sea código estándar, ya que no sabemos que compilador está utilizando Fire_Hugo12. Por las dudas tenemos que PCHAR es equivalente a un apuntador a caracter (char *) y ULONG es equivalente a un entero largo sin signo (unsigned long int). Con respecto al problema puedes utilizar una lista enlazada e ir insertando de manera ordenada en tu caso de mayor a menor. Para eliminar la más baja o las más bajas vas recorriendo palabra a palabra y comprobando si no es la más baja la concatenas en otra nueva cadena y reduces el contador de dicha palabra, esto lo haces hasta que dicho contador llegue a cero. Claro todo el mundo sabe eso, ni siquiera tengo la idea de porque lo mencionas. respecto al tema se tendría que mirar tu código y de que forma lo implementas para saber si es tan veloz y eficiente. Título: Re: Ayuda ordenar y eliminar palabras texto Publicado por: Fire_Hugo12 en 16 Diciembre 2012, 19:03 pm Gracias a las 2 por las respuestas, ya logre ordenarlo por cantidad de repeticiones... lo unico que me falta y tengo una duda es en la parte de borrar los menores, tengo que "v" es el menor numero de repeticiones pero me da un error en la funcion, me dice "error: too few arguments to function 'void borrar(tipoNodo**, int) " que puede ser?
(el compilador que uso es el codeblock) Código: void borrar(Lista *lista, int v) Título: Re: Ayuda ordenar y eliminar palabras texto Publicado por: naderST en 16 Diciembre 2012, 21:00 pm Gracias a las 2 por las respuestas, ya logre ordenarlo por cantidad de repeticiones... lo unico que me falta y tengo una duda es en la parte de borrar los menores, tengo que "v" es el menor numero de repeticiones pero me da un error en la funcion, me dice "error: too few arguments to function 'void borrar(tipoNodo**, int) " que puede ser? (el compilador que uso es el codeblock) Código: void borrar(Lista *lista, int v) Ojo CodeBlocks es el IDE lo más seguro es que tu compilador sea GCC. Podrías colocar el fragmento de código donde haces el llamado a la función borrar? Claro todo el mundo sabe eso, ni siquiera tengo la idea de porque lo mencionas. respecto al tema se tendría que mirar tu código y de que forma lo implementas para saber si es tan veloz y eficiente. No todo el mundo lo sabe, por eso lo menciono y como he visto varios posts que respondes y colocas código NO estándar quise hacer la acotación, pero OJO esto no es nada personal, simplemente te lo digo porque a MI parecer es lo más correcto, no quiero caer en discusiones acerca del tema. No tengo ninguna implementación, pero en esencia es lo mejor ir insertando de manera ordenada en una lista enlazada o un arreglo para que al momento de eliminar la palabra o las palabras con el número menor de ocurrencias se sabe de ante mano que es la última en la lista o en el arreglo. Título: Re: Ayuda ordenar y eliminar palabras texto Publicado por: Fire_Hugo12 en 16 Diciembre 2012, 23:33 pm la llamo dentro de un switch en el main:
Código: //dependiendo la opc del menu Título: Re: Ayuda ordenar y eliminar palabras texto Publicado por: naderST en 17 Diciembre 2012, 05:50 am la llamo dentro de un switch en el main: Código: //dependiendo la opc del menu La función borrar recibe dos parámetros y no le estás pasando ninguno, debes pasarle la lista y el valor. Título: Re: Ayuda ordenar y eliminar palabras texto Publicado por: Fire_Hugo12 en 17 Diciembre 2012, 22:20 pm aaah oks gracias naderST y x64Core ya solucione el problema y termine el programa
:D Título: Re: Ayuda ordenar y eliminar palabras texto Publicado por: rir3760 en 18 Diciembre 2012, 03:01 am Algo que preocupa, en base a los fragmentos de código fuente, es no utilizar la biblioteca estándar de C++. Por ejemplo puedes leer la linea con getline, obtener las palabras de ella con un objeto de tipo stringstream, evitar los duplicados con un mapa, etc.
Un ejemplo de ello (sin validaciones) es: Código
Un saludo |