SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: pacorubio77 en Jueves 12 de Abril de 2007, 13:26
-
Holas,mirar mi problema es el siguiente..yo primero que todo tengo que leer un fichero y mi funcion me tiene que hacer lo siguiente:
mi fichero:
hola guapo hola
hola guapa
el resultado tendria que ser:
hola guapo
guapa
es decir las palabras repetidas...no tienen que salir...
me podeis ayudar?
teniendo en cuenta..que todas las palabras(no repetidas) las guardo en un vector de palabras,es decir en mi caso,en el vector de palabras tendria " hola guapo guapa",
Un saludo,espero respuesta.
-
Sino te interesa el orden (que seria alfabetico probablemente) una solucion muy simple y que basicamente implica que el trabajo sea efectuado por parte de la STL es usar un set en vez de un vector.
De otra manera recorre el vector con un iterator y comproba que no exista ya una cadena en el mismo.
-
ya..lo siento,,pero es que no distes respuesta a mi problema.No me dijistes nada en concreto Eternal Idol,no te molestes,pero es asi,me has dado solución o ayuda a la mayoria de mis problemillas,pero a este no,no te mosquees,,jejjeeje
-
ya..lo siento,,pero es que no distes respuesta a mi problema.No me dijistes nada en concreto Eternal Idol,no te molestes,pero es asi,me has dado solución o ayuda a la mayoria de mis problemillas,pero a este no,no te mosquees,,jejjeeje
No me parece que sea cierto eso:
recorre el vector con un iterator y comproba que no exista ya una cadena en el mismo.
Eso es una respuesta concreta y es una forma de hacerlo, incluso te di otra opcion donde no tenes que hacer nada. Que no puedas implementar ninguna de las dos y necesites el codigo es otra historia totalmente diferente.
-
es que la cuestion es que tengo que hacerlo linea a linea,y te digo que las palabras las tengo almacenadas en un vector de palabras,me entiendes?si no me entiendes,tengo el codigo a mano,si quieres te lo muestro...no pasa nada,para mi no es ninguna molestia enseñarte el código.
-
es que la cuestion es que tengo que hacerlo linea a linea,y te digo que las palabras las tengo almacenadas en un vector de palabras,me entiendes?si no me entiendes,tengo el codigo a mano,si quieres te lo muestro...no pasa nada,para mi no es ninguna molestia enseñarte el código.
Que ahora tengas X no significa que sea lo adecuado y por eso te doy una opcion de usar otra cosa. Ademas te digo como hacerlo con lo que ya tenes pero parece que el que no entiende como hacerlo sos vos. Que tengas que hacerlo linea a linea da exactamente lo mismo, lo importante es que puedas determinar que hay en el vector para poder decidir si agregar o no nuevos elementos.
¿Sabes recorrer un vector? Se hace con un iterator, asi podes saber que elementos hay en el mismo. Si en vez de agregar directamente con push_back haces una funcion que recorra el vector y compare el elemento a agregar con los ya existentes podes agregar al vector una unica vez cada elemento.
-
si.yo entiendo lo que me dices,mira yo tengo un vector apariciones donde me dice cuantas veces está una palabra,pero conforme yo lo tengo echo,en la frase:
hola paco hola, "hola" esta dos veces,como podría hacer yo que solo me imprimiera la primera?,me entiendes?
es decir si yo tengo el siguiente fichero:
hola paco hola
hola loco
solo me imprimiera por pantalla:
hola paco
loco
lo que quiero es que no se la idea,era para ver si me ayudabas..con dicha idea..,yo te digo lo que hago y las funciones que tengo.
Tengo una funcion que es buscarPalabra,que busca la palabra en mi vector de palabras y me dice la posicion en la que esta,
siesta=buscarpalabra(parametros)//me devuelve la posicion de donde está la palabra.
if(apariciones[siesta]=1 )
cout<<palabra;
eso lo que hace es que si tengo :
hola paco
hola julio
//me lo hace bien,es decir porque hola aparece en lineas diferentes,,pero nada mas que tenga la palabra repetida en la misma linea me lo hace mal..me puedes ayudar?
-
pero una nota muy importante,,y que creo que no tienes en cuenta...
esto que yo quiero hacer es una función de un programa..y el vector de palabras,cuando llego a esta opcion ya esta rellenado y el vector de apariciones tambien,,, es decir si yo tengo
hola paco hola
mi vector de palabras ya tiene
hola
paco
y el vector de apariciones
2
1
es por si te sirve para ayudarme
-
Con separar las palabras dentro de las lineas (strchr/strstr sirve para eso) antes de meterlas en el vector te alcanza.
-
pero una nota muy importante,,y que creo que no tienes en cuenta...
esto que yo quiero hacer es una función de un programa..y el vector de palabras,cuando llego a esta opcion ya esta rellenado y el vector de apariciones tambien,,, es decir si yo tengo
Dificilmente pueda tener en cuenta algo que desconozco ... pero sigo sin ver cual es el verdadero problema. ¿Quien se encarga de hacer eso y que haces vos exactamente? ¿Tratar de poner las palabras segun la linea?
-
y claro que se recorrer un vector,,mira te escribo mi código..para que veas que voy algo encaminado.vale?
tama1=linea.length();
for(m=0;m<tama1;m++){
if (CaracterValido()==false) cout <<linea[m];
else{
string aux;int siesta,i_aux;
i_aux=ExtraerPalabra(parametros....);devuelve la posicion donde acaba la palabra.
siesta=BuscarPalabra(parametros....);busca la palabra en el vector de palabras y nos devuelve la posicion donde está en el vector de palabras.
if (apariciones[siesta]==1) {
cout<<aux;
}
m=i_aux-1;
}
}
ahi estaría el codigo,,omita si no he definido algo,,es decir, si no he inicilializado algo,vale?haber si con esto me puedes ayudar
-
¿Es necesario usar una lista que es para otra cosa? ¿No es mas facil hacer tu propia lista?
Podes empezar por borrar de tu misma linea todas las palabras repetidas ...
-
Ese es mi problema,que no se implementarlo,es decir que no se como hacerlo,,por eso lo pregunto..no se como implementarlo en código.
-
Ese es mi problema,que no se implementarlo,es decir que no se como hacerlo,,por eso lo pregunto..no se como implementarlo en código.
¿Que es lo que no sabes implementar? ¿Tu propia lista de palabras? ¿"Borrar" las palabras repetidas?
-
borrar..es lo que no se implementar...no se implementar...
-
borrar..es lo que no se implementar...no se implementar...
Hay varias formas de hacerlo, podes crear una nueva cadena y olvidarte de la linea del archivo y en esta solo poner palabras sin repetir. Otra forma seria ignorar y es mas simple, en cuanto determinas una palabra, la buscas en la misma linea (strstr) y si la encontras directamente la ignoras.