/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

unir cadenas

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
phicar



Registrado: 19 Nov 2007
Mensajes: 6
Ubicación: 127.0.0.1

MensajePublicado: 26/11/2007 10:00 am
Título: unir cadenas

bueno pues primero què màs es mi primer post llevo un par de dìas viendo el foro y està muy àspero...bueno lo que pasa es que estoy un programilla por que recien empiezo con c....ya lo hice con vb pero quiero mudarl como para ir aprendiendo..y pues hay una parte del programa en vb

Código:
z = z & i Mod 2


y pues se como hacer mod's en c y toda la cosa,...el problema viene cuàndo intento unir las cadenas en vb es con el "&"..y pues vi una funciòn despuès de investigar que se llama strcat que une dos cadenas,pero los mios son otros tipos de datos....entonces no se

entonces viene la cosa

Código:
while(deci > 0){
      z = z une deci % 2;
      deci = deci / 2;
      }


donde està el une es donde quiero unir..y pues lo que pense fue pues bueno strcat(z,deci % 2)

Código:
while(deci > 0){
      z = strcat(z,deci % 2);
      deci = deci / 2;
      }


y quedarìa asì..pero no me funciona..nose si me puedan ayudar..que pena la ignorancia y gracias


phicar:):)
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3837
Ubicación: Mexico

MensajePublicado: 26/11/2007 10:08 am
Título:

Lo que puedes hacer es utilizar dos cadenas literales ("0" y "1") e indicar cual de estas utilizar mediante el operador condicional.

El fragmento modificado seria:
Código:
while (deci > 0){
   z = strcat(z, (deci % 2) == 0 ? "0" : "1");
   deci = deci / 2;
}


Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
phicar



Registrado: 19 Nov 2007
Mensajes: 6
Ubicación: 127.0.0.1

MensajePublicado: 26/11/2007 10:09 am
Título:

gracias..entonces no andaba tan perdido...

suerte
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 377
Ubicación: Cono Sur

MensajePublicado: 26/11/2007 10:11 am
Título:

El prototipo de la función strcat es: char *strcat(char*s1, const char *s2); y se encuentra en el header <string.h>

Un saludo
Volver arriba
david_celta



Registrado: 02 Jun 2005
Mensajes: 151

MensajePublicado: 26/11/2007 12:16 pm
Título:

Tambien se podria hacer con un sprintf

int num=10;
char cad[5]="gol";
char otra[15];
sprintf(otra,"%s # %d",cad,num);
printf(otra);

Bueno es otro ejemplo
_________________
In all your fantasies,
you always knew
that man and mystery...

...were both in you...
Volver arriba
phicar



Registrado: 19 Nov 2007
Mensajes: 6
Ubicación: 127.0.0.1

MensajePublicado: 26/11/2007 1:30 pm
Título:

bueno gracias a los que han respuesto...pero no me funca la funciòn que quiero....mmm se las dejo en vb que me funca perfecto y en c que siempre me bota un -369394 jeje

vb
Código:


Public Function dec(i As String) As Long
Dim n As Integer
Dim a As Integer
dec = 0
For n = Len(i) To n = 1 Step -1
On Error Resume Next
dec = dec + Val(Val(Mid(i, n, 1)) * Val(2 ^ a))
On Error Resume Next
a = a + 1

Next

End Function


esa me funciona perfecto...pues yo la programe y llevo ya mi tiempo programando en vb pero al momjento de pasarla a c..hoy empece..entonces la hice asì....tengo problemas con los tipos y todo

Código:
int dec(char bin[10])
{
 int a;
 int n;
 int deci;
 int dos;
 dos = 2;
 a = 0;
 for(n = strlen(bin)-1;n > (-1);--n){
    deci = deci + ((bin[n]) * ( pow(dos,a) ));
    a++;
       }
      return deci;
}


pues gracias...si me pueden ayudar...

le he cambiado resto de veces los tipos de datos y me sigue dando lo mismo...entonces no se..la tengo con la misma lògica que la de vb-..


suerte

phicar:):)
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3837
Ubicación: Mexico

MensajePublicado: 26/11/2007 4:10 pm
Título:

Los errores en esa funcion son utilizar la variable "deci" sin antes inicializarla a cero y utilizar directamente el valor del caracter "bin[n]" (para obtener el digito se le debe restar '0').

Si el objetivo de esa funcion es tomar la representacion en cadena de un numero en base 2 y en base a este obtener un entero no necesitas (en C) calcular la longitud de la cadena como tampoco concatenar cadenas.

El algoritmo es muy sencillo: mientras el caracter procesado no sea el caracter de fin de cadena '\0' tomas el valor del acumulado, lo multiplicas por dos y le sumas el digito siendo procesado.

Esa funcion en C seria asi:
Código:
int dec(char *cadena)
{
   int numero;
   int i;
   
   numero = 0;
   for (i = 0; cadena[i] != '\0'; i++)
      numero = numero * 2 + (cadena[i] - '0');
   
   return numero;
}


Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
david_celta



Registrado: 02 Jun 2005
Mensajes: 151

MensajePublicado: 26/11/2007 5:29 pm
Título:

Primer post:
Código:

z = z & i Mod 2


Ultimo post:
Código:

Public Function dec(i As String) As Long
Dim n As Integer
Dim a As Integer
dec = 0
For n = Len(i) To n = 1 Step -1
On Error Resume Next
dec = dec + Val(Val(Mid(i, n, 1)) * Val(2 ^ a))
On Error Resume Next
a = a + 1
Next

End Function


Debo estar ciego porque no veo el operador & (concatenacion) de vb por ningun lado en el ultimo post ¿sera que ya cambiaron de tema? No acabo de darme cuenta.

Te falta lo del cero '0' que alguien ya mencionó (por eso del Ascii, el caracter '0' es el numero 48, el '1' es el 49 y asi.......... para "convertirlo" a entero se hace esa gran resta)
_________________
In all your fantasies,
you always knew
that man and mystery...

...were both in you...
Volver arriba
phicar



Registrado: 19 Nov 2007
Mensajes: 6
Ubicación: 127.0.0.1

MensajePublicado: 27/11/2007 2:13 pm
Título: nada...

bueno pues que les digo gracias..que pena por cambiar el tema pero pongo el còdigo que me diste con los {}..y tales..y modifique mi còdigo con lo que dijeron y da una vaina igual pero no es el resultado que espero..mno me funciona...

hay està el que hice y el que me dio rir3760
Código:

int dec(char *bin)
{
 int a;
 int n;
 int deci;
 int dos;
 dos = 2;
 deci = 0;
 a = 0;
 for(n = strlen(bin) - 1;n > (-1);--n){
    deci = (deci) + ((bin[n] - '0') * ( pow(dos,a) ));
    a++;
       }
      return deci;
}

int deci(char *cadena)
{
   int numero;
   int i;

   numero = 0;
   for (i = 0; cadena[i] != '\0'; ++i){
      numero = numero * 2 + (cadena[i] - '0');}

   return numero;
}


no se si ya es que soy negado..pero no me funca..y aplico la misma lògica que le di al de vb y me funca perfecto.. pues obviamente le agrege lo del - '0' que me dijeron...y nada...

entocnes no se...seguire dandole a ver...suerte
phicar:):)
Volver arriba
david_celta



Registrado: 02 Jun 2005
Mensajes: 151

MensajePublicado: 27/11/2007 2:30 pm
Título:

Public Function dec(i As String) As Long
Dim n As Integer
Dim a As Integer
dec = 0
For n = Len(i) To n = 1 Step -1
On Error Resume Next
dec = dec + Val(Val(Mid(i, n, 1)) * Val(2 ^ a))
On Error Resume Next
a = a + 1
Next
End Function

Intentare pasar tu vb a c, a ver:

long dec(char i[])
{
int n;
int a=0;
int resultado=0;

for(n=strlen(i);n>=1;n--)
{
resultado=resultado+(i[n-1]-'0')*(int)pow(2,a);
a=a+1;
}

return resultado;
}

Ahi esta, prueba si funciona
_________________
In all your fantasies,
you always knew
that man and mystery...

...were both in you...
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3837
Ubicación: Mexico

MensajePublicado: 27/11/2007 4:15 pm
Título:

Tu funcion aun cuando tiene varios elementos innecesarios funciona correctamente. Para encontrar el error tendriamos que revisar el codigo fuente completo del programa y tendrias que indicarnos cual es exactamente el mensaje de error (o comportamiento erroneo), indicar simplemente "no funca" es demasiado vago.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
phicar



Registrado: 19 Nov 2007
Mensajes: 6
Ubicación: 127.0.0.1

MensajePublicado: 27/11/2007 6:17 pm
Título: nada...

visto que ninguna de las tres me funciona(la de rir,la mia y la de celta)
pero me botan lo mismo...debe ser la otra parte del còdigo....mm...


Código:
#include <stdlib.h>
#include <string.h>
#include <math.h>
int dec(char *bin);
int deci(char *cadena);
long decim(char i[]);
int main()
{
   char hola[50];
   char sola[50];
   char binario[10];
   int a;
   int b;
   b = 0;
   long p;
   fgets(hola, 50 ,stdin);
   p = sizeof(hola);
   for(a=strlen(hola)-1;a>(-1);--a){
      sola[b]=hola[a];
      b++;
   }
     sola[b]='\0';

   printf(" este es hola : %s y este es sola xP : %s y este es el tamaño : %i \n",hola,sola,p);

   system("pause>null");
    printf("imprima numero binario");
   scanf("%ld",binario);//fgets(binario, 10 ,stdin);
   printf("nùmero binario:%d \n nùmero binario:%ld",dec(binario),decim(binario));


   return 0;
}
int dec(char *bin)
{
 int a;
 int n;
 int deci;
 int dos;
 dos = 2;
 deci = 0;
 a = 0;
 for(n = strlen(bin) - 1;n > (-1);--n){
    deci = (deci) + ((bin[n] - '0') * ( pow(dos,a) ));
    a++;
       }
      return deci;
}

int deci(char *cadena)
{
   int numero;
   int i;

   numero = 0;
   for (i = 0; cadena[i] != '\0'; ++i){
      numero = numero * 2 + (cadena[i] - '0');}

   return numero;
}
long decim(char i[])
{
int n;
int a=0;
int resultado=0;

for(n=strlen(i);n>=1;n--)
{
resultado=resultado+(i[n-1]-'0')*(int)pow(2,a);
a=a+1;
}

return resultado;
}



el scanf està comentado con el fgets.por que estaba intentando con los dos...xDD

suerte...que pena haber sido tan "vago" en la explicaciòn..y me dan con scanf...eje:101=53..con fgets 101 = -28----siendo que 101 = 5 2^2 + 2^0 = 5

suerte y de nuevo gracias...
Volver arriba
david_celta



Registrado: 02 Jun 2005
Mensajes: 151

MensajePublicado: 27/11/2007 7:29 pm
Título:

Ahi esta: scanf("%ld",binario);

En vez de "ld" va "s" porque estas ingresando una cadena y no un numero largo, una cadena "101" no un numero 101. Por eso no funciona, cambiale a "s" y prueba.
_________________
In all your fantasies,
you always knew
that man and mystery...

...were both in you...
Volver arriba
phicar



Registrado: 19 Nov 2007
Mensajes: 6
Ubicación: 127.0.0.1

MensajePublicado: 27/11/2007 7:45 pm
Título: grax

xP..gracias por todo..ya me voy entendiendo con este berraco..gracias d nuevo..y pues espero no volver a preguntar...xDD
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com