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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  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 18,891 veces)
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
[RETO] Alternativa a Instr()
« en: 31 Diciembre 2010, 21:14 pm »

Bueno, pues eso, para empezar el año con buen pie propongo este reto, consiste en crear una función que haga lo mismo que Instr(). ;D
(En principio sin contar con métodos de compración)
Si hay dudas postear. ;)



DoEvents! :P


« Última modificación: 1 Enero 2011, 00:32 am por Mr. Frog © » En línea

Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
Re: [RETO] Alternativa a Instr()
« Respuesta #1 en: 31 Diciembre 2010, 22:43 pm »

Hola, estaba en la otra PC, la llamo MierdBook (NetBook) entonces leí ésto y dije, excelente, puedo pasar mi tiempo con ésto haciendolo desde el Bloc de notas, lo terminé en el bloc y cdo lo probé en la verdadera PC, funcionó sin errores, ni tuve q hacer cambios :D

Código
  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4. Dim SearchString As String, SearchChar As String
  5.  
  6. SearchString = "Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena."
  7.  
  8. SearchChar = "col"
  9.  
  10. MsgBox InStr(1, SearchString, SearchChar)
  11. MsgBox MyInStr(1, SearchString, SearchChar)
  12. End
  13. End Sub
  14.  
  15. Public Function MyInStr(ByVal Sutato As Integer, ByVal SearchString As String, ByVal SearchChar As String) As Integer
  16. Dim i As Integer, LenSS As Integer, LenSC As Integer
  17. Dim x As Integer
  18.  
  19. LenSS = Len(SearchString)
  20. LenSC = Len(SearchChar)
  21.  
  22. 'Anti-Dumb
  23. If LenSC = 0 Or LenSS = 0 Then Exit Function
  24. 'Anti-Dumb
  25. If Sutato < 0 Then Sutato = 0
  26.  
  27. 'Only 1 Char?
  28. If LenSC = 1 Then
  29.    For i = Sutato To LenSS
  30.        If Mid(SearchChar, 1, 1) = Mid(SearchString, i, 1) Then
  31.            MyInStr = i
  32.            Exit Function
  33.        End If
  34.    Next i
  35. End If
  36.  
  37. For i = Sutato To LenSS
  38.    If Mid(SearchChar, 1, 1) = Mid(SearchString, i, 1) Then
  39.        For x = 2 To LenSC
  40.            If Mid(SearchChar, x, 1) = Mid(SearchString, i + (x - 1), 1) Then
  41.                If x = LenSC Then
  42.                    MyInStr = i
  43.                    Exit Function
  44.                End If
  45.            Else
  46.                i = i + (x - 1)
  47.                Exit For
  48.            End If
  49.        Next x
  50.    End If
  51. Next i
  52. End Function
  53.  

Feliz año nuevo (Y).


« Última modificación: 31 Diciembre 2010, 23:45 pm por Miseryk » En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
TGa.

Desconectado Desconectado

Mensajes: 43



Ver Perfil
Re: [RETO] Alternativa a Instr()
« Respuesta #2 en: 31 Diciembre 2010, 23:18 pm »

Bueno aca les dejo mi codigo. Me conformo con que funcione. Por lo menos pude realizarlo dentro de los pocos conocimientos que tengo ;D ;D

Código
  1. Private Function RETO_InStr(Start As Long, String1 As String, String2 As String) As Long
  2.    Dim sSplit() As String
  3.    Dim Num As Long
  4.    Dim i As Long
  5.  
  6.    Start = Start - 1
  7.  
  8.    If Start < 0 Then Start = 0
  9.  
  10.    sSplit = Split(String1, String2)
  11.  
  12.    Num = Len(sSplit(0))
  13.    For i = LBound(sSplit) To UBound(sSplit)
  14.        If Num >= Start Then
  15.            If Num = Len(String1) Then
  16.                RETO_InStr = 0
  17.            Else
  18.                RETO_InStr = Num + 1
  19.            End If
  20.  
  21.            Exit For
  22.        End If
  23.  
  24.        Num = Num + Len(sSplit(i + 1)) + Len(String2)
  25.    Next i
  26. End Function
  27.  
« Última modificación: 1 Enero 2011, 10:22 am por gaston93 » En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [RETO] Alternativa a Instr()
« Respuesta #3 en: 1 Enero 2011, 00:25 am »

Gracias por participar! :D
Aquí dejo la mía (la primera :xD)

Código
  1. Option Explicit
  2. Option Base 0
  3.  
  4. Private Function myInstr&(ByVal Start&, ByVal String1$, ByVal String2$)
  5. Dim bvString1() As Byte, bvString2() As Byte
  6. Dim ls2Len&, lLimit&
  7. Dim Q&, C&
  8.    ls2Len& = ((Len(String2$)) - &H1)
  9.    If ls2Len& > -1 Then
  10.        lLimit& = ((Len(String1$)) - ls2Len&)
  11.        If lLimit& > 1 Then
  12.            bvString1 = (VBA.StrConv(String1$, vbFromUnicode))
  13.            bvString2 = (VBA.StrConv(String2$, vbFromUnicode))
  14.            Q& = (Start& - &H1)
  15.            Do While (Q& < lLimit&)
  16.                Do While (bvString1(Q& + C&) = bvString2(C&))
  17.                    'Debug.Print ChrW$(bvString1(Q& + C&)); ChrW$(bvString2(C&))
  18.                    C& = C& + &H1
  19.                    If ((C& - &H1) = ls2Len&) Then
  20.                        myInstr& = Q& + &H1
  21.                        Exit Function
  22.                    End If
  23.                Loop
  24.                Q& = (Q& + C&) + &H1
  25.                C& = &H0
  26.            Loop
  27.        End If
  28.    End If
  29. End Function

Código
  1. Private Sub Form_Load()
  2.    Const s As String = "hola qu4 que tal"
  3.    Debug.Print CStr(myInstr&(1, s, "que"))
  4. End Sub


Está hecha rápida... :silbar:

DoEvents! :P
« Última modificación: 13 Enero 2011, 02:02 am por Mr. Frog © » En línea

Tokes

Desconectado Desconectado

Mensajes: 140


Ver Perfil
Re: [RETO] Alternativa a Instr()
« Respuesta #4 en: 1 Enero 2011, 00:34 am »

Hola, gente:

Aquí dejo mi aporte:

Código:
Private Function strinstr(ByVal start As Long, ByVal s1 As String, ByVal s2 As String) As Long
Dim pos1 As Long, pos2 As Long, long1 As Long, long2 As Long

    long1 = Len(s1)
    long2 = Len(s2)
   
    pos2 = 1
    For pos1 = start To long1
        If Mid(s1, pos1, 1) = Mid(s2, pos2, 1) Then
            pos2 = pos2 + 1
            If pos2 > long2 Then
                strinstr = pos1 - long2 + 1
                Exit Function
            End If
        Else
            pos2 = 1
        End If
    Next
End Function

¡Feliz Año!
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: [RETO] Alternativa a Instr()
« Respuesta #5 en: 1 Enero 2011, 01:53 am »

Me da que no vais a poder superar la velocidad de la funcion de VB :P
Código:
http://xbeat.net/vbspeed/c_InStr.htm

Feliz año nueeeevo!!
En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: [RETO] Alternativa a Instr()
« Respuesta #6 en: 1 Enero 2011, 02:02 am »

HOLA!!!

Bueno por suerte termine antes de año nuevo, por cierto Feliz año a todos (aca son las 2200).
No se que veolocidad tiene, pero bueno aca esta:

Código
  1. Public Function InStr2(ByVal Start&, ByVal Cadena$, ByVal Busca$) As Integer
  2.   Dim x        As Integer
  3.   Dim TamC     As Integer
  4.   Dim TamB     As Integer
  5.   Dim FirstCHR As String
  6.  
  7.       TamC = Len(Cadena)
  8.       TamB = Len(Busca)
  9.  
  10.       If TamC = 0 Or TamB = 0 Or TamC < TamB Then Exit Function
  11.  
  12.       FirstCHR = Mid$(Busca, 1, 1)
  13.  
  14.       For x = Start To TamC - TamB
  15.           If Mid$(Cadena, x, 1) = FirstCHR Then
  16.               If Mid$(Cadena, x, TamB) = Busca Then
  17.                   InStr2 = x
  18.                   Exit Function
  19.               End If
  20.           End If
  21.       Next
  22.  
  23. End Function

P.D: Mr. Frog, espero consejos :P

GRACIAS POR LEER!!!
« Última modificación: 1 Enero 2011, 17:37 pm por 79137913 » En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [RETO] Alternativa a Instr()
« Respuesta #7 en: 1 Enero 2011, 02:27 am »

Me da que no vais a poder superar la velocidad de la funcion de VB :P
Código:
http://xbeat.net/vbspeed/c_InStr.htm

Feliz año nueeeevo!!
Aguafiestas! :laugh:
Pero tienes razón, sera difícil superarlo, pero el que más se acerque gana :)
Se me ocurrió una nueva forma de hacerlo, mañana posteo... :P

DoEvents! :P
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [RETO] Alternativa a Instr()
« Respuesta #8 en: 1 Enero 2011, 02:50 am »

Código
  1. Public Function rInStr(ByVal offset As Long, ByVal inString As String, ByVal Search As String) As Long
  2.    ' Anti dumb XD
  3.    If offset And &H80000000 Then Exit Function 'offset = offset * -1
  4.    If Search = inString Then Exit Function
  5.  
  6.    Dim inLen As Long, sLen As Long
  7.    inLen = Len(inString)
  8.    sLen = Len(Search)
  9.  
  10.    If inLen = 0 Or sLen = 0 Then rInStr = offset: Exit Function
  11.  
  12.    Dim i As Long, sChar As String
  13.    ' Anti dumb XD
  14.    If offset > inLen Or sLen >= inLen Then Exit Function
  15.    If offset > 0 Then inString = Mid$(inString, offset): inLen = inLen - offset
  16.  
  17.    sChar = Mid$(Search, 1, 1)
  18.    For i = 1 To inLen
  19.        If sChar = Mid$(inString, i, 1) Then
  20.            If Mid$(inString, i, sLen) = Search Then
  21.                rInStr = offset + i - 1
  22.                Exit Function
  23.            End If
  24.        End If
  25.    Next
  26. End Function
  27.  

Se puede optimizar, mañana o mas tarde lo vere :P

Subi un proyecto con todos las funciones y una rutina para probarlas.... y la verdad, ni si quiera le ganamos a InStr :xD

Código:
============ RETO INSTR 01/01/2011 - 11:19:42 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,526022
01 Tenient101          02,011307
02 Tokes v2            02,248696
03 BlackZeroX          02,377656
04 Mr Frog(BlackZeroX) 02,381506
05 Raul338             02,476462
06 79137913            02,662523
07 Miseryk             03,857809
08 Tokes               03,988052
09 gaston93            06,426102
10 krabby              06,745615


=== 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,507416
01 Tenient101          02,110754
02 BlackZeroX          02,410378
03 Mr Frog(BlackZeroX) 02,412944 ' No paso la comprobacion
04 Tokes v2            02,450156
05 Raul338             02,522015
06 79137913            02,820355
07 Miseryk             03,936725
08 Tokes               04,002167
09 gaston93            05,453448
10 krabby              07,029840


=== 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,742880
01 Mr Frog(BlackZeroX) 02,393055
02 BlackZeroX          02,406528
03 gaston93            02,632368
04 krabby              02,923010
05 Raul338             22,377361
06 Tokes v2            22,565989
07 79137913            27,793681
08 Tenient101          28,396136
09 Tokes               45,295668
10 Miseryk             87,607375


=== 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
============ VELOCIDAD ============
00 Miseryk             00,173146 ' No paso la comprobacion
01 79137913            00,206509 ' No paso la comprobacion
02 Raul338             00,216133
03 Tenient101          00,232173 ' No paso la comprobacion
04 krabby              00,333544 ' No paso la comprobacion
05 Mr Frog(BlackZeroX) 00,381664 ' No paso la comprobacion
06 Tokes v2            00,406686
07 InStr               00,425934
08 BlackZeroX          01,805356 ' No paso la comprobacion
09 gaston93            02,109471 ' No paso la comprobacion
10 Tokes               36,895304 ' No paso la comprobacion

Test made by Raul338. Thanks to BlackZeroX

:P El proyecto se puede bajar desde aca :)

http://www.mediafire.com/?nnt1jaazilrid1o

Lo ire actualizando conforme modifiquen/suban funciones :)
« Última modificación: 2 Enero 2011, 03:23 am por raul338 » En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: [RETO] Alternativa a Instr()
« Respuesta #9 en: 1 Enero 2011, 03:14 am »

HOLA!!!

XD, Me habia olvidado del Exit Function, ahi lo modifique.
Ahora me veo un poquito mejor en la tabla :P.

P.D1:Vuelvan a hacer la Tabla XD

P.D2: Mr. Frog Si estas en Invisible//No conectado, no puedo hablarte :P.

GRACIAS POR LEER!!!
« Última modificación: 1 Enero 2011, 03:16 am por 79137913 » En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
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,921 Ú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 3,063 Último mensaje 31 Diciembre 2008, 15:20 pm
por Dessa
Instr para byte arrays [src]
Programación Visual Basic
cobein 3 2,328 Último mensaje 31 Mayo 2009, 12:42 pm
por cobein
Alternativa a pow? [c] « 1 2 »
Programación C/C++
flacc 10 11,845 Ú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 10,345 Último mensaje 14 Enero 2011, 02:35 am
por Littlehorse
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines