unir cadenas mediante punteros

Iniciado por ;c1v!c, 3 Noviembre 2011, 18:55 PM

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

;c1v!c

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

codigo:

void reverse(char *punt,char *puntt)
{
   int largo1=0;int largo2=0;int lg=0;
while(*punt!='\0')
{
punt++;
largo1++;
}
while(*puntt!='\0')
{
puntt++;
largo2++;
}
    lg=largo1+largo2;
char largos[lg];
for(?¿?¿?¿?)
{
    ?¿?¿?
}
}





satu

Hola

No se si funcionará pero sería una idea:

void reverse(char *punt,char *puntt)
{
    int largo1=0, largo2=0, lg=0, i;
    char *aux = punt, *aux2 = puntt;
    while(*punt!='\0')
        {
        punt++;
        largo1++;
        }
    while(*puntt!='\0')
        {
        puntt++;
        largo2++;
        }
    lg=largo1+largo2;
    char largos[lg];

    for(i=0; i<largo1; i++)
        {
        largos[i] = *aux;
        aux++;
        }
    for(; i<lg; i++)
        {
        largos[i] = *aux2;
        aux2++;
        }
}


Saludos
Breakbeat como forma de vida

;c1v!c

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.



#include <stdio.h>
#include <stdlib.h>

void reverse(char *punt,char *puntt);

int main()
{
char cade1[5];
char cade2[5];
char *punt;char *puntt;
printf("\tIngrese cadena:");
gets(cade1);
printf("\tIngrese cadena:");
gets(cade2);

punt=&cade1[5];
puntt=&cade2[5];

reverse(cade1,cade2);

return 0;
}
//-----funcion unir caracteres------//
void reverse(char *punt,char *puntt)
{
char *aux = punt, *aux2 = puntt;
int largo1=0;int largo2=0;int lg=0;
while(*punt!='\0')
{
punt++;
largo1++;
}
while(*puntt!='\0')
{
puntt++;
largo2++;
}
    lg=largo1+largo2;
char largos[lg];int i=0;
for(i=0; i<largo1; i++)
        {
        largos[i] = *aux;
        aux++;
        }
    for(; i<lg; i++)
        {
        largos[i] = *aux2;
        aux2++;
        }
printf("\t[%s]\n",largos);

}

.::DoX::.

Citarsi 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.

lg=largo1+largo2;
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:

int main()
{

char s1[23] = "Hola como le va ";
char s2[6] = "Mundo";

_strcat(s1, s2);
printf("%s", s1);

getchar();
return 0;
}

void _strcat(char* str1, char* str2)
{
while(*str1)
*str1++ = *str1;
while(*str2)
*str1++ = *str2++;
*str1 = '\0';
}


El resultado se guarda en str1  :P.

;c1v!c

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!

rir3760

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:
*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:
void strcat(char *s, char *t)
{
    while (*s != '\0')
        s++;
   
    while ((*s++ = *t++) != '\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

do-while

¡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!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!