[RETO] uCaseCorrect. Corrector de Mayusculas!

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

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

79137913

HOLA!!!

Este reto consiste en poner mayusculas a las letras que estan delante de un punto , punto y aparte , nueva linea , signo de exclamacion o signo de interrogacion (abiertos o cerrados).

Estructura:
Código (vb) [Seleccionar]
uCaseCorrect(Txt as String) as String

La funcion debe corregir las mayusculas de la cadena poniendo mayusculas despues de los puntos y en cuanto a los ¡! y ¿?  miren esto : http://goo.gl/z14ab

:¬¬ FROG :¬¬

Creo que con eso lo habran entendido...

GRACIAS POR LEER!!!
"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

Que bonito! :D
Me apunto! :)
Igual quedaría más divertido metiendo más cosas, como por ejemplo despues de las comas... :P

DoEvents! :P

79137913

HOLA!!!

Como despues de las comas? XD

Que yo sepa despues de las comas se escribe igual.

Ya se le agregamos los otros signos de puntuacion como ¿? y ¡! Que luego hay que escribir mayusculas.

GRACIAS POR LEER!!!
"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*


79137913

HOLA!!!

Actualizado el RETO!

Agregadas variables booleanas para seleccionar si queres poner mayusculas despues de puntos, signos de interrogacion o exclamacion.


GRACIAS POR LEER!!!
"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*

Edu

Pero Frog, en el coso q pasaste es porq dice un Nombre xD, voy a ver si puedo hacer este reto aunquesea xD

79137913

#6
HOLA!!!

Al fin!

Termine la funcion, estoy feliz con que sea funcional XD no se como me va a ir con la velocidad, seguro es lenta :P

Código (vb) [Seleccionar]
Private Function uCaseCorrect7913(Txt As String) As String
Dim X         As Long
Dim Y         As Long
Dim Aux()     As String
Dim MED       As Long
Dim Ubi()     As Long
Dim Susp      As Long
Dim SIGNO(2)  As String

SIGNO(0) = ".": SIGNO(1) = "?": SIGNO(2) = "!"   'TOMADO DE XXX-ZERO-XXX

Txt = "." & Txt & "a"
ReDim Sus(Int(Len(Txt) / 3))
ReDim Ubi(Len(Txt) + 5)
   '".?¡"
   For X = 0 To 2
       Do
           Y = Y + 1
           Ubi(Y) = InStr(Ubi(Y - 1) + 1, Txt, SIGNO(X))
       Loop While Ubi(Y) <> 0
   Next
   'COMPROBAR "..."
   Do
       Susp = InStr(Susp + 1, Txt, "...")
       If Susp <> 0 Then
           For X = 1 To Y
               If Ubi(X) = Susp + 2 Then Ubi(X) = 0
           Next
       End If
   Loop While Susp <> 0
   'PONER MAYUSCULAS A LA PUNTUACION
   ReDim Preserve Ubi(Y)
   For X = 1 To Y
       If Ubi(X) > 0 Then
           MED = Ubi(X)
           Do
               MED = MED + 1
           Loop While Not (((Asc(Mid$(Txt, MED, 1)) > 64) And Asc(Mid$(Txt, MED, 1)) < 91) Or ((Asc(Mid$(Txt, MED, 1)) > 96) And Asc(Mid$(Txt, MED, 1)) < 123)) And Not (Mid$(Txt, MED, 1) = "," Or Mid$(Txt, MED, 1) = ";" Or Mid$(Txt, MED, 1) = ".")
           Mid$(Txt, MED, 1) = UCase$(Mid$(Txt, MED, 1))
       End If
   Next
   'vbNewLine--------vbNewLine
   Aux = Split(Txt, vbNewLine)
   For X = 0 To UBound(Aux)
       MED = 0
       If X <> 0 Then
           If Right$(Aux(X - 1), 1) = "." Or Right$(Aux(X - 1), 1) = "?" Or Right$(Aux(X - 1), 1) = "!" Then
               Do
                   MED = MED + 1
               Loop While Not (((Asc(Mid$(Aux(X), MED, 1)) > 64) And Asc(Mid$(Aux(X), MED, 1)) < 91) Or ((Asc(Mid$(Aux(X), MED, 1)) > 96) And Asc(Mid$(Aux(X), MED, 1)) < 123))
               Mid$(Aux(X), MED, 1) = UCase$(Mid$(Aux(X), MED, 1))
           End If
       End If
   Next
   For X = 0 To UBound(Aux)
       uCaseCorrect7913 = uCaseCorrect7913 & Aux(X) & vbNewLine
   Next
   uCaseCorrect7913 = Mid$(uCaseCorrect7913, 2, Len(uCaseCorrect7913) - 4)
End Function


GRACIAS POR LEER!!!
"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*

Edu

#7
Bueno yo dejo la mia, como siempre 0 profesional xD pero bue.. talvez es la forma mas facil y eso es bueno no se.

EDITADOOO: Me dedico a otra cosa mejor mientras.. xD

BlackZeroX

#8
@79137913

Error:

Cadenas:

* "miguel, ¡cuanto me alegro de que hayas llamado!"
** Debe retornar: "Miguel, ¡cuánto me alegro de que hayas llamado!"

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

Edu

#9
Me faltan mas cosas pero voy dejando aca, desp voy modificando este post:

Código (vb) [Seleccionar]

Option Explicit

Function uCaseCorrect(txt As String) As String

Dim sFrase As String, sText As String
Dim pos As Long, i As Long, k As Long
Dim signo(4) As String
signo(0) = "¡": signo(2) = "."
signo(1) = "¿": signo(3) = "!": signo(4) = "?"

sText = UCase$(Left$(txt, 1))
sFrase = sText & Mid$(txt, 2)
uCaseCorrect = sFrase

For i = 0 To 4
If InStr(1, sFrase, signo(i)) <> 0 Then
k = 1
Do
pos = InStr(k, sFrase, signo(i))
While Mid$(sFrase, pos + 1, 1) = " "
pos = pos + 1
Wend
sText = UCase$(Mid$(sFrase, pos + 1, 1)) & Mid$(sFrase, pos + 2)
sFrase = Left$(sFrase, pos) & sText
k = k + 1
Loop While InStr(k, sFrase, signo(i)) <> 0
End If
Next i

uCaseCorrect = sFrase

End Function

Private Sub Form_Load()

Debug.Print uCaseCorrect("¡hola! ¿como andas? espero que bien che!!!   Que pases bien entonces. chau. bye!")

End Sub


Salida:

Citar
¡Hola! ¿Como andas? Espero que bien che!!!   Que pases bien entonces. Chau. Bye!