Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] duda con sub cadenas en programacion C

Estas en el tema de duda con sub cadenas en programacion C en el foro de C/C++ en Foros del Web. hola que tal tengo una duda hay forma de insertar una cadena dentro de otra cadena de caracteres tengo qe hacerlo con una funcion de ...
  #1 (permalink)  
Antiguo 17/09/2013, 18:20
 
Fecha de Ingreso: septiembre-2010
Mensajes: 101
Antigüedad: 13 años, 7 meses
Puntos: 0
duda con sub cadenas en programacion C

hola que tal tengo una duda

hay forma de insertar una cadena dentro de otra cadena de caracteres

tengo qe hacerlo con una funcion de string.h
pero la verdad no se como hacerlo
  #2 (permalink)  
Antiguo 18/09/2013, 03:22
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: duda con sub cadenas en programacion C

Buenos días, puedes usar la función strcat

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main (int argc, char *argv[])
  5. {
  6.   char aux1[9] = "Prob";
  7.   char aux2[5] = "ando";
  8.  
  9.   strcat(aux1, aux2);
  10.  
  11.   puts(aux1);
  12.  
  13.   return 0;
  14. }
  15.  
  16. /* output: Probando */
  #3 (permalink)  
Antiguo 18/09/2013, 09:38
 
Fecha de Ingreso: septiembre-2010
Mensajes: 101
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: duda con sub cadenas en programacion C

hola guzzano , gracias por tu respuesta
podrias decirme exactamete que hace esa funcion?
mete una cadena dentro de la otra pero en que posicion o toda en una sola posicion?
no entiendo como funciona
  #4 (permalink)  
Antiguo 18/09/2013, 09:42
 
Fecha de Ingreso: septiembre-2010
Mensajes: 101
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: duda con sub cadenas en programacion C

se puede elegir en que posicion insertar la sub cadena?
  #5 (permalink)  
Antiguo 18/09/2013, 15:36
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: duda con sub cadenas en programacion C

No, strcat únicamente añade la cadena 2 al final de la cadena 1.
  #6 (permalink)  
Antiguo 18/09/2013, 18:03
 
Fecha de Ingreso: septiembre-2010
Mensajes: 101
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: duda con sub cadenas en programacion C

no hay forma entonceS?
  #7 (permalink)  
Antiguo 18/09/2013, 21:52
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: duda con sub cadenas en programacion C

Cita:
Iniciado por eke_ps Ver Mensaje
no hay forma entonceS?
Hola eke_ps.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. void insert(char *, char *, int);
  6.  
  7. int main()
  8. {
  9.   // cadenas de ejemplo
  10.   char s1[] = "Una vez.", s2[] = " sola opcion a la ";
  11.  
  12.   insert(s1, s2, 3);
  13.   printf("%s\n", s1);
  14.  
  15.   return 0;
  16. }
  17.  
  18. void insert(char *s1, char *s2, int pos)
  19. {
  20.   int length = strlen(s1) + strlen(s2);
  21.   char *s3 = (char*) malloc(length);
  22.  
  23.   strncpy(s3, s1, pos);
  24.   s3[pos] = '\0';
  25.   strcat(s3, s2);
  26.   strcat(s3, s1 + pos);
  27.   strcpy(s1,s3);
  28.  
  29.   free(s3);
  30. }

Saludos.
  #8 (permalink)  
Antiguo 19/09/2013, 16:30
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: duda con sub cadenas en programacion C

Cita:
Iniciado por eke_ps Ver Mensaje
no hay forma entonceS?
Si hay forma, lo que no hay es una función estándar que haga el trabajo
  #9 (permalink)  
Antiguo 20/09/2013, 10:03
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: duda con sub cadenas en programacion C

Aquí te dejo una solución, hecha rápida, puede hacerse mejor, ese trabajo te lo dejo a ti. Como el caso de no requerir espacios y que ruede los caracteres la misma función.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. char *
  5. p_strcat(dest, src, position, len)
  6.  
  7. char *dest;
  8. const char *src;
  9. unsigned int position;
  10. size_t len;
  11.  
  12. {
  13.   /* sanity check */
  14.   if (position < 0 || len <= 0 || position > len ||
  15.       strlen(dest)+strlen(src) > len)
  16.         return NULL;
  17.  
  18.   unsigned int i = 0;
  19.   unsigned int pos = 0;
  20.    
  21.   char * aux = dest;
  22.  
  23.   for (; *aux != '\0'; aux++, pos++)
  24.     if (pos == position) break;
  25.  
  26.   for (; src[i] != '\0' ; i++)
  27.   {
  28.     *aux = src[i];
  29.     aux++;
  30.   }
  31.   return dest;
  32. }
  33.  
  34. int
  35. main (int argc, char *argv[])
  36. {
  37.   char aux1[60] = "Mi nombre es:         de Venezuela.";
  38.   char aux2[8] = "Alberto";
  39.  
  40.   p_strcat(aux1, aux2, 14, sizeof(aux1));
  41.   puts(aux1);
  42.  
  43.   return 0;
  44. }

En la solución de efcisa, tiene unos errores y observaciones.

Código C:
Ver original
  1. char s1[100] = "Una vez.", s2[] = " sola opcion a la";

En la función, vas a pasar al final toda la cadena a s1 pero a esta la definiste solo el espacio de "Una vez."

Código C:
Ver original
  1. char *s3 = (char*) malloc(length);

malloc devuelve un puntero nulo, por lo cual no es necesario tener el case, si es por legibilidad es mejor

Código C:
Ver original
  1. char *s3 = malloc(sizeof(char)*length);
  2.  
  3.   if (s3 == NULL)
  4.     return;

Tiene otros errores, que seguro son con las funciones strcat y strcpy, a lo mejor porque no está especificado el caracteres final

Código test:
Ver original
  1. ==8453==
  2. ==8453== HEAP SUMMARY:
  3. ==8453==     in use at exit: 0 bytes in 0 blocks
  4. ==8453==   total heap usage: 1 allocs, 1 frees, 25 bytes allocated
  5. ==8453==
  6. ==8453== All heap blocks were freed -- no leaks are possible
  7. ==8453==
  8. ==8453== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 12 from 8)
  9. ==8453==
  10. ==8453== 1 errors in context 1 of 2:
  11. ==8453== Invalid read of size 1
  12. ==8453==    at 0x40086AD: strcpy (mc_replace_strmem.c:442)
  13. ==8453==    by 0x8048614: insert (in /home/guzzano/test)
  14. ==8453==    by 0x8048560: main (in /home/guzzano/test)
  15. ==8453==  Address 0x4028041 is 0 bytes after a block of size 25 alloc'd
  16. ==8453==    at 0x4007282: malloc (vg_replace_malloc.c:270)
  17. ==8453==    by 0x80485AD: insert (in /home/guzzano/test)
  18. ==8453==    by 0x8048560: main (in /home/guzzano/test)
  19. ==8453==
  20. ==8453==
  21. ==8453== 1 errors in context 2 of 2:
  22. ==8453== Invalid write of size 1
  23. ==8453==    at 0x4008321: strcat (mc_replace_strmem.c:267)
  24. ==8453==    by 0x8048602: insert (in /home/guzzano/test)
  25. ==8453==    by 0x8048560: main (in /home/guzzano/test)
  26. ==8453==  Address 0x4028041 is 0 bytes after a block of size 25 alloc'd
  27. ==8453==    at 0x4007282: malloc (vg_replace_malloc.c:270)
  28. ==8453==    by 0x80485AD: insert (in /home/guzzano/test)
  29. ==8453==    by 0x8048560: main (in /home/guzzano/test)
  30. ==8453==
  31. --8453--
  32. --8453-- used_suppression:     12 U1004-ARM-_dl_relocate_object
  33. ==8453==
  34. ==8453== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 12 from 8)

Saludos
  #10 (permalink)  
Antiguo 20/09/2013, 12:40
 
Fecha de Ingreso: septiembre-2010
Mensajes: 101
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: duda con sub cadenas en programacion C

gracias a todos

Etiquetas: cadenas, funcion, programacion, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:58.