Public Sub Main()
Print InvierteCadena("Gambas")
Print InvierteCadenaDos("Gambas")
End
Public Function InvierteCadena(cadena As String) As String
Dim pos As Integer
Dim cadinv As String
For pos = String.Len(cadena) To 1 Step -1
cadinv &= String.Mid(cadena, pos, 1)
Next
Return cadinv
End
Public Sub InvierteCadenaDos(cadena As String) As String
'Solo caracteres ascii
Return (Byte[].FromString(cadena)).Reverse().ToString()
End
Public Sub InvierteCadenaTres(cadena As String) As String
If String.Len(cadena) = 1 Then
Return cadena
Else
Return InvierteCadenaTres(String.Mid(cadena, 2)) & String.Mid(cadena, 1, 1)
Endif
End
Public Function Potencia(numero As Integer, exponente As Integer) As Long
If exponente = 0 Then
Return 1
Else
Return numero * Potencia(numero, exponente - 1)
Endif
End
' Gambas module file
Public Sub Main()
Dim i, t As Float = Timer
Dim invertida As String
For i = 1 To 10 ^ 6
invertida = ""
invertida = InvierteCadena("Gambas y Shell")
Next
Print "Tiempo para 10^6 repeticiones: ", Timer - t, invertida
t = Timer
For i = 1 To 10 ^ 6
invertida = ""
invertida = InvierteCadenaDos("Gambas y Shell")
Next
Print "Tiempo para 10^6 repeticiones, metodo 2: ", Timer - t, invertida
End
Public Function InvierteCadena(cadena As String) As String
Dim pos As Integer
Dim cadinv As String
For pos = String.Len(cadena) To 1 Step -1
cadinv &= String.Mid(cadena, pos, 1)
Next
Return cadinv
End
Public Sub InvierteCadenaDos(cadena As String) As String
'Solo caracteres ascii
Return (Byte[].FromString(cadena)).Reverse().ToString()
End
(27-01-2021, 05:05)tercoide escribió: Me referia a hacer un benchmark como este
(27-01-2021, 22:24)tercoide escribió: Ahi hay 3 funciones que no sabia ni que existían, aun Gambas nos sorprende cada tanto con su poder
Public Sub Main()
TestBenchMark("InvierteCadena", "Gambas y Shell")
TestBenchMark("InvierteCadenaDos", "Gambas y Shell")
TestBenchMark("InvierteCadenaTres", "Gambas y Shell")
End
Public Function TestBenchMark(nombrefuncion As String, cadena As String)
Dim i, t As Float
Dim cadenainvertida As String
Dim ob As Object
ob = Me
t = Timer
For i = 1 To 10 ^ 6
cadenainvertida = ""
cadenainvertida = Object.Call(ob, nombrefuncion, [cadena])
Next
Print "Tiempo para 10^6 repeticiones, método: " & nombrefuncion & " = "; Format(Timer - t, "0.######") & "s" & "\t" & " Cadena invertida: "; cadenainvertida
End
Public Function InvierteCadena(cadena As String) As String
Dim pos As Integer
Dim cadinv As String
For pos = String.Len(cadena) To 1 Step -1
cadinv &= String.Mid(cadena, pos, 1)
Next
Return cadinv
End
Public Sub InvierteCadenaDos(cadena As String) As String
'Solo caracteres ascii
Return (Byte[].FromString(cadena)).Reverse().ToString()
End
Public Sub InvierteCadenaTres(cadena As String) As String
If String.Len(cadena) = 1 Then
Return cadena
Else
Return InvierteCadenaTres(String.Mid(cadena, 2)) & String.Mid(cadena, 1, 1)
Endif
End
Cita:Tiempo para 10^6 repeticiones, método: InvierteCadena = 1,188117s Cadena invertida: llehS y sabmaG
Tiempo para 10^6 repeticiones, método: InvierteCadenaDos = 0,617942s Cadena invertida: llehS y sabmaG
Tiempo para 10^6 repeticiones, método: InvierteCadenaTres = 2,3332s Cadena invertida: llehS y sabmaG