Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: franco73 en 22 de Abril 2015, 16:35

Título: Implementar la función atoi en C Almacenar caracter de una cadena en variable
Publicado por: franco73 en 22 de Abril 2015, 16:35
Hola que tal! Soy nuevo aca disculen si pongo algo mal.

Estoy necesitando ayuda con un ejercicio donde tengo que hacer la funcion atoi. Aclaro que no vi la funcion adentro porque el sentido es que la piense yo y la haga funcionar. Por eso tambien les pido que no me digan como resolverla, me gustaria terminar el algoritmo y romperme la cabeza hasta que salga.

Lo que quiero saber es si lo que estoy intentando hacer se puede, y de poderse como se haria ya que no me da.

Declare una cadena de caracteres char s[10]={1,2,3,4,5,6} y al ser un vector quiero que s[1] lo almacene en la variable A por ejemplo.

El tema es que haciendo el debug me dice que s[1] contiene 49'1' adentro.

Supongo que 49 es la direccion del puntero y 1 el caracter.

¿Como hago para que guarde solo el caracter 1?

Si pongo *s[1] me tira error.

Debug:
(http://i.imgur.com/cc9lwkQ.png)

El codigo no pongo porque no tiene sentido, solo tengo esa duda. Si esto no se puede hacer voy a arrancar para otro lado porque mi resolucion es una porqueria jaja

Muchas gracias

Título: Re:C||Almacenar caracter de una cadena en variable
Publicado por: Mastermind en 22 de Abril 2015, 17:14
Hola! Creo que el problema lo tienes en char s[10]={1,2,3,4,5,6} porque declaras que son char pero luego introduces números para que fueran char seria char s[10]={'1','2','3','4','5','6'}

Implementación simple de atoi:

Código: [Seleccionar]
// Implementación simple de atoi
#include <stdio.h>
 
// A simple atoi() function
int myAtoi(char *str) {
    int res = 0; // Inicializar el resultado
 
    // Recorrer los caracteres e ir actualizando el resultado
    for (int i = 0; str[i] != '\0'; ++i)
        res = res*10 + str[i] - '0';
 
    // return result.
return res;


Programa de ejemplo:

Código: [Seleccionar]
int main()
{
    char str[] = "89789";
    int val = myAtoi(str);
    printf ("%d ", val);
    return 0;
}

Resultado: 89789
Título: Re:C||Almacenar caracter de una cadena en variable
Publicado por: franco73 en 22 de Abril 2015, 17:48
Hola, antes que nada muchisimas gracias!

Al ver que estaba bastante encaminado para ese lado probe tu funcion y anda perfecto.

Pero no logro determinar que es lo que hace andar mal al mio. Por eso te muestro el codigo (poco optimo pero me interesa primero que anda) a ver si vos con mas conocimiento encontras el error.

Código: [Seleccionar]
int miatoi(char *s)
{int i=0,a=0;

    while (s[i]!='\0')
    {   if (i==0)
        {a=s[i];
        i++;
        }
        a=(a*10)+s[i];

       i++;
}
       return a;
    }

Eso es lo que tengo, a pesar de las lineas de mas que se pueden optimizar lo veo bastante parecido. El main es igual para las dos funciones.

La tuya devuelve lo qe corresponde mientras que la que hice me da 540 jajaja

Gracias
Título: Re:C||Almacenar caracter de una cadena en variable
Publicado por: franco73 en 22 de Abril 2015, 18:25
Bueno, lo hice andar.

Defini la cadena asi y el mio anda pero la funcion que me pasaste vos asi no funciona:

 char   s[10]={1,2,3,4,5,6,7,8};

Si defino asi:

char s[10]={'1','2','3','4','5','6','7','8'};

Tu funcion anda y mi funcion no.

Me saben explicar cual es la diferencia y cual seria la forma correcta?

Igualmente voy a leer a la tarde algo de cadenas pero  esto me re condundio.

Gracias y disculpèn la molestia
Título: Re:C||Almacenar caracter de una cadena en variable
Publicado por: Mastermind en 23 de Abril 2015, 08:49
Creo que si lo defines así:

 char   s[10]={1,2,3,4,5,6,7,8};

El compilador toma los caracteres correspondientes a los códigos ascII. Por ejemplo el código ascII de la letra a es 65

Si lo defines así:

char s[10]={'1','2','3','4','5','6','7','8'};

Lo que se toman son los caracteres.

Saludos!