elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [RETO] Alternativa a Instr()
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 3 4 [5] Ir Abajo Respuesta Imprimir
Autor Tema: [RETO] Alternativa a Instr()  (Leído 17,488 veces)
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [RETO] Alternativa a Instr()
« Respuesta #40 en: 3 Enero 2011, 01:08 am »

Yo el único que lo hice un poco diferente... :silbar:
 :xD

DoEvents! :P


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] Alternativa a Instr()
« Respuesta #41 en: 3 Enero 2011, 12:36 pm »

.
@raul338

Se usaba instr() si no mal recuerdo

 :silbar: :silbar: :silbar: :silbar:

Código
  1.  
  2. Public Function RetInstr3(Optional Start, Optional String1, Optional String2, Optional Compare As VbCompareMethod = vbBinaryCompare)
  3.    RetInstr3 = InStr(Start, String1, String2, Compare)
  4. End Function
  5.  
  6. Dulces Lunas!¡.


En línea

The Dark Shadow is my passion.
cobein


Desconectado Desconectado

Mensajes: 759



Ver Perfil WWW
Re: [RETO] Alternativa a Instr()
« Respuesta #42 en: 3 Enero 2011, 16:57 pm »

Simplemente para confirmar lo de Karcrack, los string en VB son BSTR y son algo asi

Size/string/terminator
4 bytes/null & char/null & null

Si miran el codigo siguiente van a ver que da como resultado 8, 0p0a0p0a
Código:
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Private Sub Form_Load()
    Dim s As String
    s = "papa"
    Dim lSize As Long
    CopyMemory lSize, ByVal StrPtr(s) - 4, 4
    Debug.Print lSize
End Sub

En línea

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [RETO] Alternativa a Instr()
« Respuesta #43 en: 16 Enero 2011, 18:56 pm »

Quizá ya un poco tarde... :silbar:

Aqui dejo mi 2ª forma, a diferencia de todas las demas sin depender de Mid(), Split()...

Código
  1. Option Explicit
  2. Option Base 0
  3.  
  4. Private Declare Function ArrayPtr Lib "msvbvm60" Alias "VarPtr" (ByRef Ptr() As Any) As Long
  5. Private Declare Sub PutMem4 Lib "msvbvm60" (ByVal Ptr As Long, ByVal Value As Long)
  6.  
  7. Private Function MrFrogInstrII(ByVal lngStart As Long, ByRef strString1 As String, ByRef strString2 As String) As Long
  8. Dim lngLenS2 As Long, lngLenS1 As Long, lngLimit As Long
  9. Dim lngAscHeader1(5) As Long, lngAscHeader2(5) As Long
  10. Dim intAscS1() As Integer, intAscS2() As Integer
  11. Dim Q As Long, C As Long
  12.  
  13.    If lngStart > 0 Then
  14.        lngLenS2 = LenB(strString2) \ 2
  15.        If lngLenS2 > 0 Then
  16.            lngLenS1 = LenB(strString1) \ 2
  17.            lngLimit = lngLenS1 - lngLenS2 - 1
  18.            If lngLimit > 1 Then
  19.                lngAscHeader1(0) = &H1
  20.                lngAscHeader1(1) = &H2
  21.                lngAscHeader1(3) = StrPtr(strString1)
  22.                lngAscHeader1(4) = lngLenS1
  23.                PutMem4 ArrayPtr(intAscS1), VarPtr(lngAscHeader1(0))
  24.  
  25.                lngAscHeader2(0) = &H1
  26.                lngAscHeader2(1) = &H2
  27.                lngAscHeader2(3) = StrPtr(strString2)
  28.                lngAscHeader2(4) = lngLenS2 + 1
  29.                PutMem4 ArrayPtr(intAscS2), VarPtr(lngAscHeader2(0))
  30.  
  31.                Q = lngStart - 1
  32.                Do While Q < lngLimit
  33.                    Do While intAscS1(Q + C) = intAscS2(C)
  34.                        C = C + 1
  35.                        If C = lngLenS2 Then
  36.                            MrFrogInstrII = Q + 1
  37.                            GoTo NullifyArr
  38.                        End If
  39.                    Loop
  40.                    Q = Q + C + 1
  41.                    C = 0
  42.                Loop
  43. NullifyArr:
  44.                PutMem4 ArrayPtr(intAscS1), &H0
  45.                PutMem4 ArrayPtr(intAscS2), &H0
  46.            End If
  47.        End If
  48.    End If
  49. End Function

Recordar quitar comprobación en los límites de arrays al compilar!
Debería haber tambien tests con cadenas laaaargas! :silbar:

DoEvents! :P
« Última modificación: 17 Enero 2011, 12:55 pm por Mr. Frog © » En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] Alternativa a Instr()
« Respuesta #44 en: 16 Enero 2011, 20:49 pm »

.
Actualizado:

Maravillosa funcion Rana es constante la velocidad y muy rapida!¡.

Código:

============ RETO INSTR 16/01/2011 - 02:00:22 p.m. ============
Nº de vueltas: 250
String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena.
3 Llamadas, cada una con los siguientes parametros en 'start': 1 10 20

=== PRUEBA 1 ================
String a buscar: col
============ COMPROBACION ============
InStr: 67 67 67
Los siguientes no devuelven los mismos valores, seguido de su devolucion
============ VELOCIDAD ============
00 InStr               00.376743
01 MrFrogInstrII       01.372423
02 Tokes v2            01.481183
03 Tenient101          01.783343
04 79137913            02.440223
05 Raul338             02.467343
06 Tokes               02.935583
07 Mr Frog(BlackZeroX) 02.983303
08 Miseryk             03.401823
09 gaston93            04.847983
10 krabby              07.554583
11 BlackZeroX          10.427103


=== PRUEBA 2 ================
String a buscar: la
============ COMPROBACION ============
InStr: 4 10 34
Los siguientes no devuelven los mismos valores, seguido de su devolucion
Mr. Frog(b0x) 4 4 4
============ VELOCIDAD ============
00 InStr               00.372905
01 MrFrogInstrII       01.119305
02 79137913            01.813665
03 Tenient101          01.842345
04 Raul338             02.063025
05 Mr Frog(BlackZeroX) 02.113905 ' No paso la comprobacion
06 Tokes v2            02.178465
07 BlackZeroX          02.273225
08 Tokes               03.152145
09 Miseryk             04.123825
10 gaston93            04.935465
11 krabby              05.297945


=== PRUEBA 3 ================
String a buscar: Ñ
============ COMPROBACION ============
InStr: 0 0 0
Los siguientes no devuelven los mismos valores, seguido de su devolucion
============ VELOCIDAD ============
00 InStr               00.602864
01 MrFrogInstrII       01.298824
02 gaston93            01.822624
03 BlackZeroX          02.009944
04 Mr Frog(BlackZeroX) 02.298024
05 krabby              02.540744
06 Tokes v2            17.152344
07 Raul338             17.577024
08 Tenient101          29.506144
09 79137913            31.242144
10 Tokes               37.729504
11 Miseryk             76.273224


=== PRUEBA 4 ================
String a buscar:
============ COMPROBACION ============
InStr: 1 10 20
Los siguientes no devuelven los mismos valores, seguido de su devolucion
Miseryk 0 0 0
gaston93 0 0 0
Mr. Frog(b0x) 0 0 0
Tokes 0 0 0
79137913 0 0 0
Tokes(raul338) -1 -1 -1
Tenient101 -1 -1 -1
BlackZeroX 0 0 0
krabby 0 0 0
MrFrogInstrII 0 0 0
============ VELOCIDAD ============
00 Miseryk             00.147824 ' No paso la comprobacion
01 Raul338             00.161744
02 Tokes v2            00.166224
03 79137913            00.172664 ' No paso la comprobacion
04 Tenient101          00.204504 ' No paso la comprobacion
05 Mr Frog(BlackZeroX) 00.286784 ' No paso la comprobacion
06 krabby              00.326704 ' No paso la comprobacion
07 InStr               00.355224
08 MrFrogInstrII       00.944784 ' No paso la comprobacion
09 BlackZeroX          01.629704 ' No paso la comprobacion
10 gaston93            02.140424 ' No paso la comprobacion
11 Tokes               38.439544 ' No paso la comprobacion

Test made by BlackZeroX.


Dulces Lunas!¡.
« Última modificación: 16 Enero 2011, 21:02 pm por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [RETO] Alternativa a Instr()
« Respuesta #45 en: 16 Enero 2011, 20:57 pm »

Ya corregí la función ahora devuelve lo que tiene que devolver...  ;)
Recordar quitar comprobación en los límites de arrays al compilar!
Debería haber tambien tests con cadenas laaaargas! :silbar:

DoEvents! :P



Ninguna función vuestra se acerca tanto

Código
  1. Private Sub Form_Load()
  2. Dim tmr As New CTiming
  3. Const s1 As String = "elhacker"
  4. Dim s As String
  5. Dim x As Long
  6. Dim pos As Long
  7.  
  8.    For x = 1 To 10000
  9.        s = s & ChrW$(Rnd * 255)
  10.    Next
  11.    s = s & s1
  12.    For x = 1 To 10000
  13.        s = s & ChrW$(Rnd * 255)
  14.    Next
  15.  
  16.    Me.AutoRedraw = True
  17.  
  18.    tmr.Reset
  19.    pos = InStr(1, s, s1)
  20.    Me.Print "Instr", "Ret :"; pos, tmr.sElapsed
  21.  
  22.    tmr.Reset
  23.    pos = MrFrogInstrII(1, s, s1)
  24.    Me.Print "MrFrog", "Ret :"; pos, tmr.sElapsed
  25. End Sub



DoEvents! :P
« Última modificación: 16 Enero 2011, 22:28 pm por Mr. Frog © » En línea

Páginas: 1 2 3 4 [5] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[AYUDA] Usar INSTR 2 veces
Programación Visual Basic
Rudy21 5 2,701 Último mensaje 9 Julio 2008, 04:01 am
por cassiani
como cargar 100 KBs en una variable; problema con InStr
Programación Visual Basic
drakolive 5 2,834 Último mensaje 31 Diciembre 2008, 15:20 pm
por Dessa
Instr para byte arrays [src]
Programación Visual Basic
cobein 3 2,176 Último mensaje 31 Mayo 2009, 12:42 pm
por cobein
Alternativa a pow? [c] « 1 2 »
Programación C/C++
flacc 10 11,209 Último mensaje 11 Diciembre 2010, 15:25 pm
por pucheto
[ANSI C] Split(), strlen(), mid(), Instr(), strcpy(). « 1 2 »
Programación C/C++
BlackZeroX 11 9,762 Último mensaje 14 Enero 2011, 02:35 am
por Littlehorse
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines