[RETO] Entero a cadena

Iniciado por Karcrack, 30 Agosto 2010, 22:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Karcrack

No os parece que ha pasado muchisimo desde el ultimo reto? :rolleyes: :xD

Pues este es bien simple... la forma mas rapida de pasar de numero a cadena...

Ej:
1337 -> "1337"

Por asi decirlo es un reemplazo a Str()

Ha de recibir Long y devolver String.
Ha de aceptar numeros negativos.

Venga, a codear!

Karcrack

Aqui esta, como siempre, la forma logica:
Código (vb) [Seleccionar]
Public Function ItoA01(ByVal lNumb As Long) As String
    ItoA01 = Str$(lNumb)
End Function

Psyke1

#2
Mira el mio:
Código (vb) [Seleccionar]
Public Function ItoA02(ByVal lNumber As Long) As String
   ItoA02 = CStr(lNumber)
End Function

:xD :xD :laugh: :laugh:

PD: Si soy sincero no se ni por donde empezar... :-( :silbar:

DoEvents¡! :P

raul338

Pues la verdad dudo que se pueda hacer una funcion taan rapida como la CStr o Str$... pero bueno, ya hare la mia :P

Karcrack

Este es mi primer intento, no es mas rapido que CStr() ni Str(), pero he tenido una idea a ver si me sale, luego intento >:D
Código (vb) [Seleccionar]
Public Static Function ItoA02(ByVal lNumb As Long) As String
    Dim sTable(9)   As String
    Dim b           As Boolean
    Dim x           As Boolean
   
    x = CBool(lNumb And &H80000000)
    If x Then lNumb = (lNumb Xor x) - x
   
    If b = False Then
        sTable(0) = "0":        sTable(1) = "1"
        sTable(2) = "2":        sTable(3) = "3"
        sTable(4) = "4":        sTable(5) = "5"
        sTable(6) = "6":        sTable(7) = "7"
        sTable(8) = "8":        sTable(9) = "9"
        b = True
    End If
    Do
        ItoA02 = sTable(lNumb Mod 10) & ItoA02
        lNumb = lNumb \ 10
    Loop While lNumb
   
    If x Then x = False: ItoA02 = "-" & ItoA02
End Function


Karcrack

Código (vb) [Seleccionar]
Public Function ItoA03(ByVal lNumb As Long) As String
    Dim bvRet(10)   As Byte
    Dim i           As Long
    Dim b           As Boolean
   
    b = lNumb < 0
    If b Then lNumb = -lNumb
   
    i = 10
   
    Do
        bvRet(i) = 48 + (lNumb Mod 10)
        lNumb = lNumb \ 10
        i = i - 1
    Loop While lNumb
   
    If b Then bvRet(i) = 45
   
    ItoA03 = SysAllocStringLen(bvRet(i), 10 - i)
End Function

http://www.xbeat.net/vbspeed/download/TLB_string.zip

Mas rapido que Str(), pero no mas que CStr() :-\

LeandroA

Hola y no es valido asi?


Private Function ItoA03(lNumb As Long) As String
    ItoA03 = lNumb
End Function




Psyke1

Cita de: LeandroA en 30 Agosto 2010, 23:37 PM
Hola y no es valido asi?


Private Function ItoA03(lNumb As Long) As String
    ItoA03 = lNumb
End Function
Jajajajajajaja :xD
Aun mas rapido que el mio!!

LeandroA > PsYkE1 > Karcrack
:laugh:

DoEvents¡! :P

raul338

Naaa karcrack, yo tenia una idea parecida, pero me tuve que ir :¬¬ aver...si se me ocurre algo.....

Karcrack

#9
Cita de: LeandroA en 30 Agosto 2010, 23:37 PM
Hola y no es valido asi?


Private Function ItoA03(lNumb As Long) As String
   ItoA03 = lNumb
End Function
No, no vale :¬¬ :¬¬ Eso es trampa! :xD No se porque pero cuando yo lo prove era mas lento :¬¬
Ale, pues otra cosa mas a la que superar :laugh:

MOD: Hace lo mismo que CStr internamente, asi que realmente es lo mismo :P