index(): buscar la primera vocal de una palabra en Ruby
Buscar la primera vocal de una palabra es muy fácil debido a que en Ruby todo es un objeto y posee métodos como index
, compact
y min
para trabajar sobre la información que queremos procesar. En este pequeño programa veremos paso a paso cómo podemos lograr nuestro objetivo.
Código fuente
#!/usr/bin/env ruby print("Ingrese una palabra a evaluar: ") palabra = gets.chomp.downcase a = palabra.index("a") e = palabra.index("e") i = palabra.index("i") o = palabra.index("o") u = palabra.index("u") ind = [a, e, i, o, u].compact.min puts "La primera vocal es: #{palabra[ind]}" puts "Su indice es: #{ind}"
La primera línea de este programa es opcional y se llama Shebang, es muy famosa en sistemas Unix ya que permite ejecutar programas escritos en lenguajes de tipo scripting sin necesidad de llamar al intérprete en la terminal; por ejemplo:
Con la línea Shebang | Sin la línea Shebang |
$ ./BuscarPrimeraVocal.rb | $ ruby BuscarPrimeraVocal.rb |
Leer información ingresada por el usuario
Lo típico de este tipo de programas es la interacción con el usuario.
print("Ingrese una palabra a evaluar: ") palabra = gets.chomp.downcase
Le solicitamos al usuario que ingrese la palabra que desee evaluar, luego leemos la información ingresada con el método gets
y usamos el método chomp
para eliminar el carácter de salto de línea “\n”; por último convertimos toda palabra en minúscula usando el método downcase
y la asignamos a la variable “palabra” lo que ha ingresado el usuario.
Obteniendo los índices
Ruby nos ofrece un método para obtener los índices de un carácter o substring en un string.
a = palabra.index("a") e = palabra.index("e") i = palabra.index("i") o = palabra.index("o") u = palabra.index("u")
Usamos el método index()
para obtener el índice de cada vocal. Este método solo nos devuelve el índice de la primera ocurrencia de cada vocal y en caso de no existir, nos devuelve nil
.
Obtener el índice menor
Para poder saber cuál es la primera vocal en una palabra o string, primero debemos saber cuál es el índice menor de todo los índices obtenidos anteriormente.
ind = [a, e, i, o, u].compact.min
Lo primero que debemos hacer es agrupar los índice de las 5 vocales en un objeto lista, es decir, entre “[]”; luego usamos el método compact
para eliminar todos valores nil
que nos haya devuelto el método index()
, por último obtenemos el índice menor usando el método min
y lo asignamos a la variable “ind”.
Mostrando el resultado
El programa no tendría sentido alguno si no muestra el resultado final al usuario.
puts "La primera vocal es: #{palabra[ind]}" puts "Su indice es: #{ind}"
Primero mostramos la primera vocal accediendo a ella mediante su índice palabra[ind]
y luego mostramos el índice en donde se ubica la vocal en la palabra.
Probando el programa
La única forma de saber si el programa funciona como se espera, es probandolo.
[fixedtorres@linuxero]$ ./BuscarPrimeraVocal.rb Ingrese una palabra a evaluar: 17 de Septiembre de 2019 La primera vocal es: e Su indice es: 4 [fixedtorres@linuxero]$
El programa cumple su función y nos indica que la primera vocal es la “e” y que se encuentra en el índice “4”, lo cual es cierto.