Página 1 de 1

[ANSI C] IntToStr - StrToInt

Publicado: 07 Ene 2011, 22:07
por The Swash

Código: Seleccionar todo

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

/* @autor:     The Swash
   @function:  IntToStr - StrToInt
   @language:  ANSI C
*/
   
int StrToInt(char * string);
char * IntToStr(int number);

int main()
{
    printf("char: %s \n",IntToStr(123));
    printf("int: %i",StrToInt("123"));
    return 0;
}



int StrToInt(char * string)
{
    int i, n, temp = 0;
    for (i = 0; i < strlen(string); i++)
    {
        if (  ( (int)string[i]< 48 ) || ( (int)string[i]>57 )  ) // Si el caracter es distinto a un numero
        {
            return -1; //Salimos y retornamos -1
        }
        else
        {
            for (n = 48; n <= 57; n++) // Hacemos un bucle desde el numero 0 al 9 basandonos en su valor ASCII
            {
                if (string[i] == n) // Si el valor ASCII del caracter actual correspondi al valor ASCII de un numero
                {
                    temp += (string[i] - 48); // Obtiene y suma el número actual al buffer
                    temp *= 10; // Aumenta una cifra al resultado
                }
            }
        }
    }
    return temp / 10; // Retorna el buffer, quitandole la última cifra que sobra
}



char * IntToStr(int number)
{
    int num, len = 0, i = 0, altnumber = number;
    char * buffer;
    if (number == 0)
    {
        return "0";
    }
    else
    {
        while (number > 0)
        {
           num = number%10;
           number = number / 10;
           len++;
        }
        buffer = (char *) malloc (len);
        memset(buffer,0,strlen(buffer));
        num = 0;
        i = len -1;
        while (altnumber> 0)
        {
           num = altnumber%10;
           altnumber = altnumber / 10;
           buffer[i] = (num + 48);
           i--;
        }
        return buffer;
    }


}
Bueno chicos, estaba aprendiendo ejecucion de una aplicacion con parametros por consola, y me surgió la necesidad de convertir tipos, me sirvió itoa y atoi pero no son standares, así que decidí hacer mis propias funciones a pura cabeza.
Linkgl dedicado para vos =).
Espero les sea de utilidad.

PD: Gracias osnaraus por explicarme el pequeño detalle

Saludos.

Re: [ANSI C] IntToStr - StrToInt

Publicado: 07 Ene 2011, 23:47
por ØnLy
Buen code Bro , yo desarrolle una funcion similiar hace un tiempo , pero la tuya es superior.....
Siguele Dando duro al C hermano...

Re: [ANSI C] IntToStr - StrToInt

Publicado: 08 Ene 2011, 00:07
por osnaraus
Felicitaciones !! ambas funciones rulan de pm. Creo que C++ va de a poco destripandose gracias a nuestros especialistas

Re: [ANSI C] IntToStr - StrToInt

Publicado: 08 Ene 2011, 05:03
por linkgl
xD gracias por la dedicación the gay :P bonita la función, me gusta porque eres terco igual que yo y no quieres usar sprintf para str to int hahaha :P sigue así y buen trabajo!

Re: [ANSI C] IntToStr - StrToInt

Publicado: 08 Ene 2011, 11:17
por BlackZeroX
.
Me hice mi propia atoi() por que la tuya es muy tediosa y larga ( Me sirvio de apoca madre VB6 ).

Mas simple y entendible no creo.

Código: Seleccionar todo

#include<iostream>

int atoi(char String[]);

int main()
{
    return (atoi((char*)"    -154212"));
}

int atoi(char * String)
{ // By BlackZeroX (http://InfrAngeluX.sytes.net/)
    int i, n, sign;
    for ( i=0; String[i]==' ' || String[i]=='\n' || String[i]=='\t'; i++ );
    if ( String[i]=='+' || String[i]=='-' )
        sign=(String[i++]=='+') ? 1:-1;
    else
        sign=1;

    for ( n=0 ; String[i]>='0' && String[i]<='9'; i++ )
        n = 10*n+String[i]-'0';
    return sign * n;
}

EDITO: Aqui hay mas Alternativas incluisive mejor esta función... viewtopic.php?f=36&t=29219

Temibles Lunas!¡.
.

Re: [ANSI C] IntToStr - StrToInt

Publicado: 08 Ene 2011, 11:21
por p0is0n-123
Yo me pregunto... pero C no permite realizar el cambio con (char)...?

Gracias bro... quizás que me equivoque yo...

Re: [ANSI C] IntToStr - StrToInt

Publicado: 08 Ene 2011, 11:24
por BlackZeroX
.
@p0is0n-123

Creo que solo es factible con una sola variable tipo Char pero con una matrix... hay que hacer brujeria.

Dulces Lunas!¡.
.

Re: [ANSI C] IntToStr - StrToInt

Publicado: 08 Ene 2011, 20:52
por linkgl
Jeje no es eso BlackZeroX, el verdadero problema es que (char) saca el valor ascii del caracter, es decir si pongo 11<-Me saca su valor ascii, el error viene cuando pongo A me devuelve 65 jej (:

Re: [ANSI C] IntToStr - StrToInt

Publicado: 09 Ene 2011, 01:26
por BlackZeroX
linkgl escribió:Jeje no es eso BlackZeroX, el verdadero problema es que (char) saca el valor ascii del caracter, es decir si pongo 11<-Me saca su valor ascii, el error viene cuando pongo A me devuelve 65 jej (:
Si ya lo se, es lo mismo que en VB6 con cada caracter, solo que hay es muy chusto y bruto si no sabes bien lo que haces.

y aqui es distinto si pones "1" de '1', pero claro esto ya lo sabes, y es por esto que hay que hacer magia negra y sacar los apuntes de la vieja escuela donde te rompias el coco... ( Tengo la Z del zorro en mi cabeza por andar de pinche maniatico ensima de las sillas del salon )

Dulces Luans!¡.