Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Jupiter34 en 31 Octubre 2012, 19:31 pm



Título: strcpy entre char
Publicado por: Jupiter34 en 31 Octubre 2012, 19:31 pm
Estimados,

Consulta...

Estuve trabajando con la funcion strcpy. Uds, saben me esta agregando un \n antes del \0. Lo que hace que al listarlo, mostrarlo, me haga un salto de linea.

Como puedo hacer para ir hasta el primer \n y eliminarlo? para que quede lapalabra\0

Que usuarian?

Saludos!


Título: Re: strcpy entre char
Publicado por: NeoB en 31 Octubre 2012, 20:42 pm
Puedes buscar el salto de línea y reemplazarlo por el '\0'.
Código
  1. #include <stdio.h>
  2.  
  3. void func(char *str)
  4. {
  5. int i;
  6. for (i=0; i<=strlen(str); i++)
  7. {
  8. if ( str[i] == '\n' ) str[i] = '\0';
  9. }
  10. }
  11.  
  12. int main()
  13. {
  14. char str[20] = "Hola tio!\n";
  15. func(str);
  16. printf(str);
  17. return 0;
  18. }
  19.  
Claro, que eso te eliminaría el resto de la cadena después del salto.
Dime si no es lo que buscas.


Título: Re: strcpy entre char
Publicado por: Jupiter34 en 31 Octubre 2012, 20:53 pm
Si si...

Gracias NeoB!

Toda esa info la grabo en un archivo...obviamente, al levantarlo...las primeras lineas tienen el /n y la ultima es directamente /0

Esta haciendo esta función, que va ser la contrapartida de la tuya!

Código
  1. void trim(char* b){
  2.   if (!(b[strlen(b)-1]=='\n')){
  3.        strcat(b,"\n");
  4.   }
  5. }
  6.  


Título: Re: strcpy entre char
Publicado por: rir3760 en 1 Noviembre 2012, 02:41 am
En el primer ejemplo no es necesario utilizar la función "strlen", basta con verificar si el carácter procesado es '\n' o '\0'. Otra forma de buscar el carácter '\n' es mediante la función "strchr" (prototipo en <string.h>):
Código
  1. void func(char *str)
  2. {
  3.   char *p;
  4.  
  5.   if ((p = strchr(str, '\n')) != NULL)
  6.      *p = '\0';
  7. }

Y en el segundo ejemplo si se obtiene la longitud de la cadena con "strlen" no es necesario utilizar "strcat" ya que se puede hacer de forma manual (ya que son solo dos caracteres):
Código
  1. void trim(char *b)
  2. {
  3.   size_t i = strlen(b);
  4.  
  5.   if (b[i - 1] != '\n'){
  6.      b[i] = '\n';
  7.      b[i + 1] = '\0';
  8.   }
  9. }

Un saludo


Título: Re: strcpy entre char
Publicado por: Jupiter34 en 1 Noviembre 2012, 02:55 am
Excelente la ayuda de todos! Muy agradecido! Jamas hubiese llegado a esas resoluciones! Soy mas iterativo!!!

Mil gracias!


Título: Re: strcpy entre char
Publicado por: BatchianoISpyxolo en 1 Noviembre 2012, 03:44 am
Excelente la ayuda de todos! Muy agradecido! Jamas hubiese llegado a esas resoluciones! Soy mas iterativo!!!

Mil gracias!

Ya que te quedaste sorprendido haz méritos para que tú mismo puedas llegar a esas soluciones. La clave es programar, no hay otra clave mayor que esa. Programar, programar, programar y programar, tratando de resolver diferentes problemas.

Aunque no llegues al resultado final que debes, el hecho de practicar, investigar, y buscar soluciones te vendrá de perlas, porque aprenderás nuevas ideas, conceptos, técnicas que en un futuro seguro que te servirán. Y además, al forzarte a resolverlos, adquirirás experiencia en la resolución de esos problemas y para el futuro tendrás un abanico mayor de ideas para resolver un determinado problema.

Así que mi consejo es que programes, programes, y programes. Y cuando ya veas que no puedes más, pues expones el ejercicio y tu resolución en el foro, para preguntar o para impresionarnos ;)

Además es muy importante saber lo que estás haciendo en cada momento. Es decir, saber exactamente qué hace el programa en todo momento sin tener que compilarlo.

Te dejo una imagen cómica, aunque es realista: https://pbs.twimg.com/media/A6Xjm5eCYAEubDL.jpg:large

¡Saludos y perdón por mis párrafos!