elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  unir cadenas mediante punteros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: unir cadenas mediante punteros  (Leído 4,309 veces)
;c1v!c

Desconectado Desconectado

Mensajes: 151


Forma parte de esta comunidad gamer!!!


Ver Perfil WWW
unir cadenas mediante punteros
« en: 3 Noviembre 2011, 18:55 pm »

me ayudan a unir cadenas mediante punteros sin utilizar ninguna funcion de librerias, en codigo no hice mucho...

codigo:
Código
  1. void reverse(char *punt,char *puntt)
  2. {
  3.   int largo1=0;int largo2=0;int lg=0;
  4. while(*punt!='\0')
  5. {
  6. punt++;
  7. largo1++;
  8. }
  9. while(*puntt!='\0')
  10. {
  11. puntt++;
  12. largo2++;
  13. }
  14.    lg=largo1+largo2;
  15. char largos[lg];
  16. for(?¿?¿?¿?)
  17. {
  18.    ?¿?¿?
  19. }
  20. }





En línea

satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: unir cadenas mediante punteros
« Respuesta #1 en: 3 Noviembre 2011, 20:12 pm »

Hola

No se si funcionará pero sería una idea:
Código
  1. void reverse(char *punt,char *puntt)
  2. {
  3.    int largo1=0, largo2=0, lg=0, i;
  4.    char *aux = punt, *aux2 = puntt;
  5.    while(*punt!='\0')
  6.        {
  7.        punt++;
  8.        largo1++;
  9.        }
  10.    while(*puntt!='\0')
  11.        {
  12.        puntt++;
  13.        largo2++;
  14.        }
  15.    lg=largo1+largo2;
  16.    char largos[lg];
  17.  
  18.    for(i=0; i<largo1; i++)
  19.        {
  20.        largos[i] = *aux;
  21.        aux++;
  22.        }
  23.    for(; i<lg; i++)
  24.        {
  25.        largos[i] = *aux2;
  26.        aux2++;
  27.        }
  28. }
  29.  

Saludos


En línea

Breakbeat como forma de vida
;c1v!c

Desconectado Desconectado

Mensajes: 151


Forma parte de esta comunidad gamer!!!


Ver Perfil WWW
Re: unir cadenas mediante punteros
« Respuesta #2 en: 3 Noviembre 2011, 20:26 pm »

si funciona pero me salen unos simbolos raros en la consola jejeje.
        Ingrese cadena:MAR
   Ingrese cadena:TIN
   [MARTINg����]
y me sale un "g" nada q ver.
supongo que sera por el tamaño de cada cadena.



Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void reverse(char *punt,char *puntt);
  5.  
  6. int main()
  7. {
  8. char cade1[5];
  9. char cade2[5];
  10. char *punt;char *puntt;
  11. printf("\tIngrese cadena:");
  12. gets(cade1);
  13. printf("\tIngrese cadena:");
  14. gets(cade2);
  15.  
  16. punt=&cade1[5];
  17. puntt=&cade2[5];
  18.  
  19. reverse(cade1,cade2);
  20.  
  21. return 0;
  22. }
  23. //-----funcion unir caracteres------//
  24. void reverse(char *punt,char *puntt)
  25. {
  26. char *aux = punt, *aux2 = puntt;
  27. int largo1=0;int largo2=0;int lg=0;
  28. while(*punt!='\0')
  29. {
  30. punt++;
  31. largo1++;
  32. }
  33. while(*puntt!='\0')
  34. {
  35. puntt++;
  36. largo2++;
  37. }
  38.    lg=largo1+largo2;
  39. char largos[lg];int i=0;
  40. for(i=0; i<largo1; i++)
  41.        {
  42.        largos[i] = *aux;
  43.        aux++;
  44.        }
  45.    for(; i<lg; i++)
  46.        {
  47.        largos[i] = *aux2;
  48.        aux2++;
  49.        }
  50. printf("\t[%s]\n",largos);
  51.  
  52. }
En línea

.::DoX::.

Desconectado Desconectado

Mensajes: 4



Ver Perfil
Re: unir cadenas mediante punteros
« Respuesta #3 en: 3 Noviembre 2011, 20:38 pm »

Citar
si funciona pero me salen unos simbolos raros en la consola jejeje.
        Ingrese cadena:MAR
   Ingrese cadena:TIN
   [MARTINg����]

Tienes que agregarle el caracter nulo a la cadena.

Código
  1. lg=largo1+largo2;
  2. char largos[lg];int i=0;

Segun recordaba no se puede inicializar variables de esa forma con una variable como indice, por lo menos a mi en mi IDE no me lo permite.

Hace un tiempo hice una funcion para unir cadenas mucho mas pequeña:

Código
  1. int main()
  2. {
  3.  
  4. char s1[23] = "Hola como le va ";
  5. char s2[6] = "Mundo";
  6.  
  7. _strcat(s1, s2);
  8. printf("%s", s1);
  9.  
  10. return 0;
  11. }
  12.  
  13. void _strcat(char* str1, char* str2)
  14. {
  15. while(*str1)
  16. *str1++ = *str1;
  17. while(*str2)
  18. *str1++ = *str2++;
  19. *str1 = '\0';
  20. }

El resultado se guarda en str1  :P.
En línea

;c1v!c

Desconectado Desconectado

Mensajes: 151


Forma parte de esta comunidad gamer!!!


Ver Perfil WWW
Re: unir cadenas mediante punteros
« Respuesta #4 en: 3 Noviembre 2011, 20:55 pm »

jajjajaja lo que nunca me deja de sorprender es como se puede llegar a los mismos
resultados de diferentes formas jejeje.

obvio q la tuya es mucho mejor q la mía, ojala algún día pueda pensar como un verdadero programador y resolver mas rápido y eficaz los problemas.

gracias!
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: unir cadenas mediante punteros
« Respuesta #5 en: 4 Noviembre 2011, 02:05 am »

Cuando se copia una cadena al final de otra como en el ejemplo de .::DoX::. hay dos detalles a tener en cuenta. La linea en cuestión es:
Código
  1. *str1++ = *str1;

El primero es que no es necesario copiar la cadena en si misma.

El segundo y mas pesado es el uso de "str1++" y "str1" en una expresión. Ese si es un dolor de cabeza ya que dependiendo del orden en que ellas se evalúen (y cuando aplique el efecto lateral) se pueden obtener diferentes resultados.

Por ello mejor ir con:
Código
  1. void strcat(char *s, char *t)
  2. {
  3.    while (*s != '\0')
  4.        s++;
  5.  
  6.    while ((*s++ = *t++) != '\0')
  7.        ;
  8. }

Un saludo
En línea

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
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: unir cadenas mediante punteros
« Respuesta #6 en: 4 Noviembre 2011, 06:10 am »

¡Buenas!

Un problema que puede surgir al utilizar esos metodos es que se sobrepase la longitud de la cadena que almacena el resultado. Si no puedes utilizar funciones de libreria, por ejemplo para asignar una cadena que pueda tener la longitud total, puedes evitar el error indicando en la lista de parametros la longitud maxima de la cadena que contendra el resultado de la concatenacion, asi podras ir comprobando que no la sobrepasas, o si llegas al limite, dejar de añadir caracteres.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cadenas de caracteres con punteros
Programación C/C++
pedroedlp 4 2,025 Último mensaje 12 Abril 2014, 17:25 pm
por rir3760
problema con array de punteros a cadenas « 1 2 »
Programación C/C++
MessageBoxA 12 4,806 Último mensaje 11 Julio 2014, 21:39 pm
por CalgaryCorpus
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines