Título: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: NOB2014 en 5 Agosto 2014, 19:35 pm Hola a todos.
Me pase con este tema unas cuantas horas y hasta aquí llegue, espero que me puedan ayudar a resolverlo.- En primer lugar les pongo el enunciado. (http://i59.tinypic.com/124tys4.png) Lo que llevo hecho es lo siguiente. Código
Lo que no puedo saber es ¿Qué referencia debo utilizar para acceder a la variable frase y sustituir todas las palabras de 4 letras con asteriscos ?.- Saludos y desde ya muchas gracias por el tiempo.- Daniel Título: Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: leosansan en 5 Agosto 2014, 21:47 pm Teniendo en cuenta que pueden haber varios espacios en blanco seguidos y haciendo el bestia, sin usar las funciones propias para estos efectos, propongo:
Código
¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/simba1.gif) Título: Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: NOB2014 en 6 Agosto 2014, 16:17 pm Hola Leo.
Gracias “viejo” amigo por responder, corrí tú código y me dio el mismo error que a la mayoría, si la última palabra tiene 4 letras y no tiene un espacio entre la última letra y el ‘\0’ no la sustituye.- Bueno dejo mi versión.- Código
Saludos. Daniel Título: Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: leosansan en 6 Agosto 2014, 19:19 pm Hola Leo. Gracias “viejo” amigo por responder, corrí tú código y me dio el mismo error que a la mayoría, si la última palabra tiene 4 letras y no tiene un espacio entre la última letra y el ‘\0’ no la sustituye.- Bueno dejo mi versión.- Saludos. Daniel ¡¡¡ Un placer volver a verte por aquí !!!, amigo Daniel. Ya ves que las prisas y el no testear a fondo un código tiene a veces esas consecuencias. En realidad, y creo que como bien has observado, faltaba "la última comprobación", los cuatro últimos caracteres. Paso mi código con esa corrección: Código
Y lo dicho, un placer el volver a encontrarte, y espero que sea más a menudo ¡¡¡Campeón!!!!. ;) ;) ;) EDITADO para hacer uso de strlen y abreviar. ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: Blaster en 6 Agosto 2014, 20:58 pm Otra forma, usando la función strchr:
Editado: Código
Saludos Título: Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: leosansan en 7 Agosto 2014, 00:59 am Otra forma, usando la función strchr: .............................. Saludos ¿Pero no quedamos en que íbamos a implementar nuestras propias funciones? :laugh: Es broma. Está muy bien pero a mí me falla, y ya lo digo con miedo a equivocarme, porque si el primer espacio es un espace y la primera cadena es de cuatro no la cambia por asteriscos: Código
¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/simba2.gif) Título: Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: Blaster en 7 Agosto 2014, 04:28 am Está muy bien pero a mí me falla, y ya lo digo con miedo a equivocarme, porque si el primer espacio es un espace y la primera cadena es de cuatro no la cambia por asteriscos: Inconveniente solventado ahora va de maravilla edite el código de arriba Saludos Título: Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: leosansan en 7 Agosto 2014, 16:34 pm Inconveniente solventado ahora va de maravilla edite el código de arriba Saludos Perfecto, ahora va como la seda. ;-) ;-) Y con una línea más a cambio de no usar función alguna: Código
Espero que esto nos sirva a todos para que ver que soluciones "haberlas haylas " y que tan sólo es cuestión del momento que salga una a bote pronto pero hay que analizar las distintas opciones en busca de la más eficiente. ;) ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/simba1.gif) Título: Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: Blaster en 7 Agosto 2014, 16:51 pm Y con una línea más a cambio de no usar función alguna: Va bien pero no tiene en cuenta si la ultima palabra es de cuatro caracteres y no tiene un espacio entre el ultimo carácter y el carácter nulo Saludos Título: Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: leosansan en 7 Agosto 2014, 17:21 pm Va bien pero no tiene en cuenta si la ultima palabra es de cuatro caracteres y no tiene un espacio entre el ultimo carácter y el carácter nulo Pues a corregirlo. ;)Saludos EDITO: Es que ese caracter nulo ;D: Edité el mensaje anterior, pero lo que modifiqué fue la línea: Código
para tener en cuenta al nulo. ;-) (http://st.forocoches.com/foro/images/smilies/simba1.gif) Título: Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: rir3760 en 7 Agosto 2014, 19:01 pm Es que ese caracter nulo ;D: Es mejor mantenerse con la versión con centinela ya que a cambio de dos asignaciones fuera del bucle te ahorras la comparación dentro de este.Edité el mensaje anterior, pero lo que modifiqué fue la línea: Código
para tener en cuenta al nulo. ;-) Otra alternativa consiste en utilizar la función strcspn para encontrar el siguiente carácter igual a ' ' o '\0' y la función memset para imprimir los cuatro espacios (los prototipos de ambas en <string.h>). Un saludo Título: Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: Blaster en 7 Agosto 2014, 21:31 pm Otra alternativa consiste en utilizar la función strcspn para encontrar el siguiente carácter igual a ' ' o '\0' y la función memset para imprimir los cuatro espacios (los prototipos de ambas en <string.h>). Me gusto la idea de rir3760 la implemente de esta manera: Código
Saludos Título: Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: leosansan en 7 Agosto 2014, 22:46 pm Me gusto la idea de rir3760 la implemente de esta manera: ...................................................................... Código .................................................. ...................................................................... Sólo que el else-if está exclusivamente para el la posible primera palabra y podría ser más propio: Código
Peo al César lo que es del César, lo has bordado. ;) ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/simba2.gif) Título: Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: Blaster en 7 Agosto 2014, 22:55 pm Sólo que el else-if está exclusivamente para el la posible primera palabra y podría ser más propio: Es cierto leosansan no me había fijado, gracias por la observación ;) Saludos Título: Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: NOB2014 en 8 Agosto 2014, 04:38 am Hola a todos.
Me gusta esta triada, rir3760 la idea, Blaster la materializa y Leo el vigilador, observador, corregidor, muy interesante el código de Blaster, realmente no creo que se pueda hacer con menos líneas y como soy un apasionado de los códigos concisos, muchos aplausos para los tres.- ;-) ;-) ;-) Yo tengo mi última versión pero ante esto realmente da vergüenza, el lacayo se rinde a vuestros pies.- :-X Después de esto tengo que implementar un programa con números mágicos, si no lo logro por mi cuenta les pediré ayuda.- Saludos y un gran abrazo. Daniel. Título: Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: leosansan en 8 Agosto 2014, 05:59 am Es mejor mantenerse con la versión con centinela ya que a cambio de dos asignaciones fuera del bucle te ahorras la comparación dentro de este. ............................................................................................ Estaré "espeso" pero no veo que me salga del array, en todo caso veo que llego al caracter nulo pero no más allá. Otra alternativa consiste en utilizar la función strcspn para encontrar el siguiente carácter igual a ' ' o '\0' y la función memset para imprimir los cuatro espacios (los prototipos de ambas en <string.h>). Por cosa como esas es por lo que te echaba de menos últimamente "maestro". ;-) Como Blaster se me adelantó, mi propuesta es una "mezcla, uso memset para copiar los asteriscos y sigo usando mi propia "strcspn" y con el mismo y escueto número de líneas: Código
Hola a todos. Me gusta esta triada, rir3760 la idea, Blaster la materializa y Leo el vigilador, observador, corregidor .......................................................................................... Gracias a tí Daniel por querer compartir conocimientos y, como no, a Blaster y rir3760 por los "bellos" aportes que han realizado y el espíritu de sana competencia que nos lleva a enriquecernos a todos, al menos intelectualmente. Y sí, creo que entre todos los usuarios de este foro formamos un buen equipo, y eso que he echado de menos a eferion y vangdop, etc.... y al ya lejano amchacon. Esto último sí que me duele, espero que se anime y vuelva por este foro. .......................................................................................... Después de esto tengo que implementar un programa con números mágicos, si no lo logro por mi cuenta les pediré ayuda.- ............................................................................................ Eso me alegra de manera especial ya que yo soy más de números que, como este tema, de letras. Esperaremos impacientes tus aportes y/o dudas al respecto. Un fuerte abrazo, campeón. ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) Publicado por: Blaster en 8 Agosto 2014, 16:14 pm Nueva versión la deje de la siguiente manera:
Código
No me gustaba lo de restarle uno ;) EDITO: Creo es mejor conservar la versión anterior, ya que encontré que esta es propensa a hacer comparaciones fuera del buffer al pasarle una cadena como esta "2510 2" REEDITÓ: Ahora va perfecto Saludos |