[RETO] uCaseCorrect. Corrector de Mayusculas!

Iniciado por 79137913, 16 Febrero 2011, 13:08 PM

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

Psyke1

#30
Ya está corregido el mío también... :)




Prueba:
Código (vb) [Seleccionar]

Private Sub Form_Load()
Dim c1  As Class1
Const s1 As String = "¿hola como estás? , esto es sólo una prueba Miguel... y además : ¡funciona genial!  amo a las ranas!."
   
   Set c1 = New Class1
   Debug.Print c1.CorrectUCase(s1)
   Debug.Print uCaseCorrect7913(s1)
   Set c1 = Nothing
End sub


Retorno:

¿Hola como estás? , esto es sólo una prueba Miguel... y además : ¡funciona genial!  Amo a las ranas!.
¿Hola como estás? , esto es sólo una prueba Miguel... y además : ¡funciona genial!  Amo a las ranas!.A


Cambiando esta linea el 3 por un 4 me da resultado correcto:
Código (vb) [Seleccionar]
uCaseCorrect7913 = Mid$(uCaseCorrect7913, 2, Len(uCaseCorrect7913) - 4)




Test:
Código (vb) [Seleccionar]

'Compilado quitando comprobación de límites de arrays

Option Explicit

Private Sub Form_Load()
Dim t   As New CTiming
Dim c1  As Class1
Dim X   As Long
Dim s   As String

   Set c1 = New Class1

   AutoRedraw = True
   
   s = Text1.Text '// Mismo contenido que en el anterior test
   
   t.Reset
   For X = 1 To 1000
       uCaseCorrect7913 s
   Next
   Me.Print "uCaseCorrect7913", t.sElapsed
   
   DoEvents
   
   t.Reset
   For X = 1 To 1000
       c1.CorrectUCase s
   Next
   Me.Print "cFrogUCase.cls", t.sElapsed
   
   Set c1 = Nothing
End Sub


Resultado:


DoEvents! :P

BlackZeroX

yo no se ustedes pero si quieren algo al 100% mejor publicamos Varias cadenas en TODAS las sircustancias para que mas de uno ya tenga a la mano dichas cadenas y haga pruebas y ls compruebe con una ya que este perfecta, es decir meterle puntos comas al grede pero que sean coherentes y tambien por que no incoherentes; pero que estas ultimas nos reporte donde rayos hay errores.

P.D.: No vi el codigo de la Rana anteriormente completo, pero esta genial ese cambio de tipo de los bytes del char a los 2 bytes del integer para asi manipular la string de forma mas facil, si no mal recuerdo esto mismo lo hacia L.A..

Dulces Lunas!¡.
The Dark Shadow is my passion.

ElFomador

Este es mi código, espero que os guste. :P
Código (vb) [Seleccionar]

Private Function uCaseCorrector(txt As String) As String
    Dim Signos As String
    Dim Espacios() As Integer
    Dim a, b As Integer
    Dim tmp As String
    Dim tmp2 As String
   
    'Los signos a controlar, se puede incrementar
    Signos = ".;:¿?¡!"
   
    'Sacamos los espacios
    ReDim Espacios(1 To Len(txt))
   
    For a = 1 To Len(txt)
        b = b + 1
        If Mid(txt, a, 1) = " " Then
            Espacios(b) = b
            b = b - 1
        Else
            tmp = tmp + Mid(txt, a, 1)
        End If
    Next a
   
    b = 0
   
    'Corregimos el texto
    For b = 1 To Len(Signos)
        For a = 1 To Len(tmp)
            If Mid(tmp, a, 1) = Mid(Signos, b, 1) And a + 1 < Len(tmp) Then
                Mid(tmp, a + 1, 1) = UCase(Mid(tmp, a + 1, 1))
            End If
        Next a
    Next b
   
    'Colocamos los espacios
    For a = 1 To Len(txt)
        If Espacios(a) <> 0 Then
            tmp2 = tmp2 + " " + Mid(tmp, a, 1)
        Else
            tmp2 = tmp2 + Mid(tmp, a, 1)
        End If
    Next a
   
    'La Solucion
    uCaseCorrector = tmp2
End Function


Saludos