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!¡.