Pasar de const char* a int

Iniciado por eleon, 15 Junio 2012, 09:24 AM

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

eleon

Buenas:

Tengo un puntero de tipo "const char*" que apunta a una cadena que lleva un número. Como es un char no puedo realizar operaciones con él, lo que quiero es asignar el número a una variable de tipo entero. Sería algo así:

Código (cpp) [Seleccionar]

const char *valor;
int valorint;
...

valorint = valor;

...

vikour92

Buenos días eleon,

Para hacer eso tienes que utilizar una función que se llama atoi ( int atoi(const char * ) ). Está en la cabecera estandar stdlib.h.

Para hacer lo que tu quieres hacer, sigo con tu código:


// La cabecera
#include <stdlib.h>
...
const char * valor;
int valorint;

valorint = atoi(valor);
...


Un saludo (más info sobre esta función http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/ )

vikour92

Cita de: vikour92 en 15 Junio 2012, 09:35 AM
Buenos días eleon,

Para hacer eso tienes que utilizar una función que se llama atoi ( int atoi(const char * ) ). Está en la cabecera estandar stdlib.h.

Para hacer lo que tu quieres hacer, sigo con tu código:


// La cabecera
#include <stdlib.h>
...
const char * valor;
int valorint;

valorint = atoi(valor);
...


Un saludo (más info sobre esta función http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/ )

Nota:
Para que atoi funcione la cadena debe empezar con el número ( es decir "123"), si esta no empezara con el número, deberías colocar un puntero hacia el número.

Osea que, en la cadena "Yo tengo 21 años", deberías recorrer la cadena hasta encontrar un dígito ( isdigit() - ctype.h ) y después pasarle a ese puntero la función atoi.

eleon

Oh, muchas gracias, funciona.

Pero con tu ejemplo me ha surgido un duda: si en esa cadena llego al número con el puntero y le paso la función atol, ¿no me convertiría a entero solo el 2?, ¿o convierte todas las cifras adyacentes para devolver el 21?.

durasno

Hola!
Citar¿no me convertiría a entero solo el 2?
no

Citarconvierte todas las cifras adyacentes para devolver el 21?
si, ya que le estas pasando un puntero a esa posicion. Osea atol recibe esta cadena "21 años"

Ojo: ojo atol y atoi son dos funciones distintas; atol convierte en un long

Saludos
Ahorrate una pregunta, lee el man