C/Visual C - array de caracteres a entero

 
Vista:

array de caracteres a entero

Publicado por Sergio Martinez (4 intervenciones) el 28/10/2003 20:56:09
Hola, como puedo pasar un array de caracteres c={0,0,0,1,2,3} a entero, para tener en otra variable el numero 123? Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:array de caracteres a entero

Publicado por Armando Nava (127 intervenciones) el 28/10/2003 22:56:23
Saludos

Convierte cada número a entero, despues, multiplicas los numeros por la potencia de 10 correpondiente y los sumas
total=3*pow(10,0)+2*pow(10,1)+1*pow(10,2).........

Puedes simplificar lo anterior con un for..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:array de caracteres a entero

Publicado por Sergio Martinez (4 intervenciones) el 29/10/2003 00:09:30
Gracias Armando. Es buena idea. Yo he probado tambien a transformar el array directamente a entero con atoi(), parece que funciona. ¿O quiza no lo estoy haciendo bien?
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:array de caracteres a entero

Publicado por chuidiang (677 intervenciones) el 29/10/2003 09:27:41
Lo del atoi() funciona bien, pero debes tener cuidado con lo siguiente

atoi() va leyendo caracteres para transformalo en un entero hasta que encuentra un fin de cadena (un caracter \0).

Para asegurar que no vas a tener ningun problema, tu array deberia ser asi

c = {'0','0','0','1','2','3','\0'}

El último es un \0 (codigo ascii 0) , no un caracter 0 (codigo ascii 48)

Si no lo haces asi, es posible que te funcione bien a veces y a veces te falle, depende de que le haya dado al compilador por poner en memoria justo despues de tu '3'.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:array de caracteres a entero

Publicado por Sergio Martinez (4 intervenciones) el 29/10/2003 14:21:14
Gracias Chuidiang, creo que ese va a ser el problema. Pero una duda, lo del \0 es igual que el numero cero?? es decir al final de la cadena no debe ir el caracter 0 ('0') sino un numero 0, verdad?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:array de caracteres a entero

Publicado por Armando Nava (127 intervenciones) el 29/10/2003 18:20:13
Reciban un saludo Sergio y Chuidiang.

No creo que este por demás mecionar otra forma de poner un caracter nulo al final de una array, se puede hacer con NULL, la definición de NULL se encuentra en las librerías stdio.h y stdlib.h.

Sin embargo un compañero me meciono que dependiendo del compilador NULL podría no siempre estar definido, así que es mejor el método de Chuidiang.

Por último el valor del caracter nulo es CERO por lo menos en TC 3.0, aunque suceden cosa interesantes si cambiamos la forma de visualizarlo
printf("El valor de null: %i", NULL);
printf("El valor de null: %s", NULL);
printf("El valor de null: %c", NULL);

La confusión está en que debemos trabajar con caracteres para hacer la comparación con un caracter nulo, si en el ejemplo siguiente cambiamos el tipo de dato del array data[4] de "char" a "int" los resultados serán muy diferentes.

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

int main(int)
{ clrscr();
char data[4]={'0','1','2',NULL}; /*Cambiar a int*/
int i;
i=0;
while(data[i]!=NULL)
{
printf("EL dato %c \n",data[i]); /*Cambiar a %i*/
i++;
}
getch();

return(0);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:array de caracteres a entero

Publicado por chuidiang (677 intervenciones) el 30/10/2003 14:57:16
El cero de fin de cadena efectivamente es un cero. Si quieres poner este cero en cadena[10] puedes hacerlo de cualquiera de estas dos formas

cadena[10] = 0;
cadena[10] = '\0';

Sin embargo, si pones

cadena[10] = '0';

estas metiendo un caracter cero, no un cero de verdad. Eso es equivalente a

cadena[10] = 48;

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar