php

PHP – Transformar vocales – Ejercicio resuelto

En este post de programación en PHP vamos a resolver un ejercicio en donde vamos a transformar todas las vocales de una cadena sin usar la función <span class="refname">strtr</span> ni str_replace. El ejercicio dice así:

Realiza una función que dada una cadena realice una transformación sin utilizar la función strtr ni str_replace y convierta todas las vocales (mayúsculas o minúsculas) del fichero a ¿.

Nota: la cadena se mandará por un formulario a través de un archivo HTML.

Ejemplo de uso:

Cadena original a transformar:
Esta es la cadena original y la voy a modificar.
Cadena final transformada:
¿st¿ ¿s l¿ c¿d¿n¿ ¿r¿g¿n¿l y l¿ v¿y ¿ m¿d¿f¿c¿r.
Número de vocales encontradas: 18

Veamos cómo resolver este ejercicio en PHP.

Explicación del algoritmo

No podemos usar las funciones para reemplazar cadenas, pero sí podemos crear una nueva cadena y concatenarle cada carácter de la cadena original.

El reemplazo vendría al concatenar, pues si encontramos que el carácter actual es una vocal, concatenamos el símbolo de reemplazo en lugar de la vocal.

En caso de que el char actual no sea una vocal, lo concatenamos tal y como está.

Reemplazar vocales en PHP

Entonces tenemos el siguiente código. Como vamos a recibir la cadena a través de un formulario, leemos del arreglo $_POST. Después declaramos una cadena vacía así como el contador de las mismas, y recorremos la cadena letra por letra.

Ya dentro del recorrido hacemos la comprobación de la que hablé anteriormente:

<?php
if (!isset($_POST["cadena"])) {
    exit("No hay cadena");
}
$cadena = $_POST["cadena"];
$transformada = "";
$vocales = 0;
for ($i = 0; $i < strlen($cadena); $i++) {
    $letra = $cadena[$i];
    # Convertir a minúscula para comprobación más simple
    $letraMinuscula = strtolower($letra);
    # Saber si es vocal. Para ello comprobamos si la letra está en el arreglo de vocales
    if (in_array($letraMinuscula, ["a", "e", "i", "o", "u"])) {
        # En caso de que sí, entonces  en lugar de agregar el caracter, agregamos un ¿
        $transformada .= "¿";
        # Y aumentamos el contador
        $vocales++;
    } else {
        # En caso de que no, agregamos el carácter normalmente
        $transformada .= $cadena[$i];
    }
}
?>

Al finalizar el recorrido de la cadena vamos a tener la misma con las vocales ya reemplazadas dentro de $transformada. Ahora podemos hacer cualquier cosa con la cadena.

Poniendo todo junto

El ejercicio de PHP solicita que la cadena sea enviada a través de un formulario web. Entonces tenemos el simple formulario HTML:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Enviar palabra</title>
</head>

<body>
    <form action="vocales.php" method="POST">
        <input type="text" name="cadena" required>
        <br>
        <br>
        <input type="submit" value="Enviar">
    </form>
</body>

</html>

Ahora lo recibimos en PHP e imprimimos los resultados justo como lo solicita el ejercicio:

<?php
if (!isset($_POST["cadena"])) {
    exit("No hay cadena");
}
$cadena = $_POST["cadena"];
$transformada = "";
$vocales = 0;
for ($i = 0; $i < strlen($cadena); $i++) {
    $letra = $cadena[$i];
    # Convertir a minúscula para comprobación más simple
    $letraMinuscula = strtolower($letra);
    # Saber si es vocal. Para ello comprobamos si la letra está en el arreglo de vocales
    if (in_array($letraMinuscula, ["a", "e", "i", "o", "u"])) {
        # En caso de que sí, entonces  en lugar de agregar el caracter, agregamos un ¿
        $transformada .= "¿";
        # Y aumentamos el contador
        $vocales++;
    } else {
        # En caso de que no, agregamos el carácter normalmente
        $transformada .= $cadena[$i];
    }
}
?>
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <?php
    echo "<strong>Cadena original a transformar: </strong><br>" . $cadena;
    echo "<br><strong>Cadena final transformada: </strong><br>" . $transformada;
    echo "<br>Número de vocales encontradas: " . $vocales;
    ?>
</body>

</html>

Al probarlo, funciona correctamente, pues se han reemplazado todas las vocales de la cadena con un símbolo especificado por el usuario, además de contar la cantidad de vocales en este ejercicio de programación en PHP:

PHP – Reemplazar vocales de cadena – Ejercicio resuelto

También puedes leer más entradas sobre PHP por aquí.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

3 días hace

Esta web usa cookies.