Convertir cadena a entero en c

Por Jose | 5 de Enero de 2010 a las 17:48 |

Es muy común convertir en número entero a una cadena en c, por ejemplo desde datos leidos en ficheros de texto o la conversión de los argumentos pasados al programa. Por suerte, c nos proporciona dos funciones para este propósito, atoi y strtol:


int atoi (const char *cadena)
long int strtol(const char *cadena, char *basura, int base)

Tanto atoi como strtol dada una cadena la convierten a un entero, devolviendo el número y en caso de error devuelven el número 0. A strtol hay que indicarle la base a la que queremos convertir el número, en la mayoría de los casos la base será 10.

Pero bien, tenemos que saber qué es una cadena errónea para esas funciones:


/* Cadenas validas: tanto atoi como strtol devuelven 528 */
char cad1[] = "528";
char cad2[] = "528abcdef";

/* Cadenas erroneas: tanto atoi como strtol devuelven 0 */
char cad1[] = "abcd";
char cad2[] = "abcdef528";

El problema viene en si al convertir una cadena de valor “0″ las funciones nos devolverán su valor entero ‘0′, y podemos interpretarlo como un error sin serlo. La solución dependiendo del caso sería utilizar la función strtol, que en caso de encontrar caracteres que no sean numéricos los almacenará en la variable ‘basura’, así sabremos en todo momento si la conversión fue o no exitosa.

A continuación un ejemplo de atoi y strtol que espero que os sirva de ayuda:


/**
*  Programa:
*      Conversion cadena a numero entero
*  Descripcion:
*      Programa que convierte un numero entero (tipo int) a una cadena de
*      caracteres (tipo char *)
*  Archivo: string2int.c
*  Ejecucion: ./string2int
*  Compilar: gcc -Wall -o string2int string2int.c
*  Autor:
*      Jose Mato
* **/
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
char cadena_valida[] = "529";
char cadena_erronea[] = "abc";
long int num = 0;
// variables para strtol
char *basura = NULL;
int base = 10;

/* forma 1: convertimos la cadena usando atoi */
num = atoi(cadena_valida);
printf("atoi (cadena valida): %ld\n", num);
num = atoi(cadena_erronea);
printf("atoi (cadena erronea): %ld\n\n", num);

/* forma 2: convertimos la cadena usando strtol */
num = strtol(cadena_valida, &amp;amp;amp;amp;basura, base);
printf("strtol (cadena valida): %ld\n", num);
num = strtol(cadena_erronea, &amp;amp;amp;amp;basura, base);
printf("strtol (cadena erronea): %ld\n", num);
if(basura[0] != 0) {
printf("Strtol ha detectado error en la cadena: %s\n", cadena_erronea);
}

return EXIT_SUCCESS;
}

Descargar: programa string2int

Posts Relacionados

No hay posts relacionados... premio de consolación: .

Dejar un comentario




XHTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>