![]() |
Contar el numero de veces que aparece cada palabra en una frase Hola a todos, bueno resulta que quiero contar el numero de veces que aparece cada palabra en cada frase de un fichero. Lo mas simple posible. Habia pensado cojer una palabra y luego contar desde su posicion las veces que se repite, supongo k habran maneras mucho mejores de hacerlo que esta pero no se me ocurre cual. Podria almacenar primero todas las palabras en un vector y luego para cada palabra recorrer otra vez la frase contando. Pero nose como hacer un vector de palabras la verdad. de hecho, podria usar search_n con palabras? algo asi habia pensado, un boceto: ... vector palabra[20]; while(fichero.getline(linea,1024)){ while(linea!="/n" || "."){ palabra[i]= linea[i]; i++} // ya tengo la palabra, como recorro de nuevo la linea si estoy en teoria en la posicion i ? while(linea<1024){ //como comparo caracter a caracter y si no corresponde vuelvo a empezar con la posicion 2? uso getchar? existe algun tipo de getword? //habia pensado en comparar los primeros caracteres, si son iguales avanzo la palabra i sigo comparando, si no lo son avanzo la frase while(palabra){ if palabra[i] = linea[u] , i++ if else linea++ } ando muy perdido se nota no :si: |
Re: Contar el numero de veces que aparece cada palabra en una frase utiliza una bandera auxiliar que recorra, todo, y dale un valor como ban=0, si la encuentra ban=1, y si ban=1, te imprima se encontro o algo asi, creo, o si no no te entendi bien |
Re: Contar el numero de veces que aparece cada palabra en una frase no entiendo muy bien lo k dices, Igual me e explicado mal: Yo tengo una frase obtenida con getline ahora quiero contar las veces k aparece cada palabra en la frase es decir, si tengo "hola pedro , como estas pedro ?." hola=1 pedro=2 ,=1 como=1 ... y los problemas que tengo son los k comento arriba, nose como almacenar palabras en un vector para luego ir comparando de una en una y almacenar cada palabra con su resultado, me han dicho algo de usar diccionarios o tablas hash pero ando muy perdido, no quiero que sea eficiente, me basta con que funcione, en el momento k vaia ia tendre tiempo para darle eficiencia Estoy buscando sobre los diccionarios pero encuentro pocos tutoriales que me valgan |
Re: Contar el numero de veces que aparece cada palabra en una frase Hola, a ver si te puedo ayudar. Lo que se me ocurre que podrias hacer es crear un tipo propio como el siguiente: Código: typedef struct{palabra es un puntero de caracter que sirve unicamente para crear un array dinamico para guardar la palabra y no malgastar memoria (habra que pedir memoria para tantas letras como tenga la palabra). Tambien puedes declarar lo siguiente y no complicarte tanto la vida xD. Código: char palabra[50];Habra que declarar un puntero del tipo Palabra, por ejemplo: Código: Palabra *p;Código: p=(Palabra*)malloc(sizeof(Palabra)*num_total);Ahora lo que toca es volver a recorrer toda la frase. Lees una palabra y la comparas con todos los campos palabra del array de registros creado. Si es igual incrementas la n. Es lo que se me acaba de ocurrir... seguramente tendra fallos pero es una idea de donde puedes partir... Consejo: Por el momento olvidate de funciones raras y haz el programa con arrays, registros, tipos propios y demas elementos basicos. Espero haberme explicado bien jaja. Cualquier duda, pregunta. |
Re: Contar el numero de veces que aparece cada palabra en una frase ook gracias, si mas o menos e hecho algo tirando por ahi y creo k ya lo tengo, es mejor tu version con punteros asi k lo cambiare, hice algo asi en pseudocodigo faltan cosas k he pensado i tengo k implementar: palabra[15] while(xxx getline(linea,1000)){ //marco linea como leida, leidas[]=1 //meto las palabras en el vector de palabras... // para cada caracter de la linea for (int u=0; u<1000; u++){ si no es blanco o final if (linea[u]!= (' '...){ //concateno en "palabra" los caracteres hasta llegar a espacio blanco sprintf (palabra, "%s%c", palabra, linea[u]); } else{ // si es igual a espacio blanco, ok tengo la palbra, y la meto en el vector de palabras (strings) //tb tengo k comprobar k la palabra no este ya metida... palabras[m]=palabra; //formateo vector palabra para posterior uso for (int v=0; v<15; v++){palabra[v]=' ';} } //ya tengo todas las palabras en el vector. Pruebo cuantas veces se repite en la linea while(palabras){ tengo k ver como funciona search_n k segun m han dicho hace lo k exactamente kiero numerovecespalabrasenfrase[g]=search_n(parametros); algo asi. lo podria optimizar como dices en vez de con tamaños fijos palabra[15] vectorpalabras[500] con punteros i luego haciendo malloc. peeeeeeeero ahora viene La segunda parte del problema k es la siguiente: Ahora quiero hacer lo mismo para: "porque no te callas callas en callas callas" porque no=1 no te=1 te callas=1 callas callas=2 callas en =1 en callas =1 La cosa se complica jejejej i eso tengo k hacerlo para N es decir, para tamaño 1, tamaño2 tamañño 3... N Total, ahora mismo estoy bloqueado en esto, nose como arreglar la funcion para ke pille los N tipos de lecturas y los almacene todos. Habia pensado entonces en 2 matrices, para cada linea: una para almacenar las palabras, en la primera fila las palabras sueltas, en la segunda las palabras compuestas por 2, en la tercera las palabras compuestas x 3... una para almacenar las repeticiones, en la primera fila el numero de veces k se repite cada palabra para N=1, en la segunda fila las palabras compuestas x 2... vy a ponerme a ello |
| La zona horaria es GMT -6. Ahora son las 09:43. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.