Buenas!.
Es un ejercicio que estoy haciendo. No es sencillo, se necesitan distintas condiciones.
Estoy comenzando por la primera condición.
"La palabra comienza por consonante".
Por ahora me encuentro el problema que la palabra acabe en consonante.
He añadido al array de vocales, las vocales con tildes, pero creo que estos elementos se pueden evitar. ( Añadirlos es más fácil ).
La idea es que funcione por ahora la primera condición.
Código:
Private vocales As String[] = ["a", "e", "i", "o", "u", "á", "é", "í", "ó", "ú"]
Private consonantes As String[] = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "ñ", "p", "q", "r", "s", "t", "v", "w", "y", "z"]
Public Sub Main()
'Condición 1. Consonante al comienzo de la palabra
'No se comtempla aún que exista al final de la palabra una consonante
'Descomponer("casa")
'Descomponer("colibrí")
Descomponer("frigorífico")
'Aquí fallaría
'Descomponer("neveras")
End
Public Sub Descomponer(palabra As String)
Dim lugar As Integer
Dim subcadena As String
While String.Len(palabra) > 1
subcadena = ConsonanteAlPrincipio(palabra)
Print subcadena
'Para obtener el lugar hasta donde llega la subcadena:
'Encuentro el comienzo de la subcadena dentro de la cadena palabra y le añado el tamaño de la longitud de la subcadena menos una posición
'No existe una posición cero, las cadenas comienzan desde 1
lugar = String.RInStr(palabra, subcadena) + String.Len(subcadena) - 1
'Eliminamos de la palabra, la subcadena que se encuentra en el lugar más una posición
'Creando una palabra nueva, lo que queda de la palabra original
palabra = String.Mid(palabra, lugar + 1)
Wend
End
Public Function ConsonanteAlPrincipio(cadena As String) As String
Dim palabra As String
Dim x As Integer
Dim encuentraconsonante As Boolean
Dim encuentravocal As Boolean
palabra = ""
x = 1
While Not encuentraconsonante Or Not encuentravocal And x <= String.Len(cadena)
'Primero encontrar la consonante
If consonantes.Find(String.Mid(cadena, x, 1)) <> -1 Then
encuentraconsonante = True
palabra &= String.Mid(cadena, x, 1)
Endif
'Si encontramos la consonante, podemos buscar la vocal
If encuentraconsonante Then
If vocales.Find(String.Mid(cadena, x, 1)) <> -1 Then
encuentravocal = True
palabra &= String.Mid(cadena, x, 1)
Endif
Endif
Inc x
Wend
Return palabra
End
¿ Cómo haríais para solventar el problema de la consonante al final ?. ( Lo sé, seguro que después encuentro la solución ).
Saludos