Autor Tema: Implementar la función atoi en C Almacenar caracter de una cadena en variable  (Leído 18860 veces)

franco73

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
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:


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

« Última modificación: 24 de Abril 2015, 12:05 por César Krall »

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:C||Almacenar caracter de una cadena en variable
« Respuesta #1 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

franco73

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:C||Almacenar caracter de una cadena en variable
« Respuesta #2 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
« Última modificación: 22 de Abril 2015, 18:10 por franco73 »

franco73

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:C||Almacenar caracter de una cadena en variable
« Respuesta #3 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

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:C||Almacenar caracter de una cadena en variable
« Respuesta #4 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!

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".