strcpy entre char

Iniciado por Jupiter34, 31 Octubre 2012, 19:31 PM

0 Miembros y 1 Visitante están viendo este tema.

Jupiter34

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!

NeoB

#1
Puedes buscar el salto de línea y reemplazarlo por el '\0'.

#include <stdio.h>

void func(char *str)
{
int i;
for (i=0; i<=strlen(str); i++)
{
if ( str[i] == '\n' ) str[i] = '\0';
}
}

int main()
{
char str[20] = "Hola tio!\n";
func(str);
printf(str);
return 0;
}

Claro, que eso te eliminaría el resto de la cadena después del salto.
Dime si no es lo que buscas.

Jupiter34

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!

void trim(char* b){
   if (!(b[strlen(b)-1]=='\n')){
        strcat(b,"\n");
   }
}

rir3760

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>):
void func(char *str)
{
   char *p;
   
   if ((p = strchr(str, '\n')) != NULL)
      *p = '\0';
}


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):
void trim(char *b)
{
   size_t i = strlen(b);
   
   if (b[i - 1] != '\n'){
      b[i] = '\n';
      b[i + 1] = '\0';
   }
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Jupiter34

Excelente la ayuda de todos! Muy agradecido! Jamas hubiese llegado a esas resoluciones! Soy mas iterativo!!!

Mil gracias!

BatchianoISpyxolo

#5
Cita de: 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!

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!
Puede que desees aprender a programar desde 0: www.espascal.es