Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Javano en 24 de Mayo 2015, 02:11
-
Hola yo no quería escribir tanto código así que investigue un poco y me di cuenta que las expresiones regulares ahorran mucho tiempo y código, combinando las funciones y el foreach y el if y el else if obtuve lo siguiente.
Enunciado:
Crear archivos php que ejecuten la tarea indicada:
a) Dada la cadena "El abecedario completo es algo largo y detallarlo exhaustivamente es costoso", indicar cuántas veces aparece cada vocal usando funciones para cadenas PHP.
b) Dada la cadena "El abecedario completo es algo largo y detallarlo exhaustivamente es costoso", indicar qué consonantes son las que aparecen y cuántas veces aparecen usando funciones para cadenas PHP.
c) Dada la cadena "El abecedario completo es algo largo y detallarlo exhaustivamente es costoso", mostrar la cadena donde todas las a hayan sido sustituídas por el símbolo *. Por ejemplo en lugar de <<El abecedario…>> se habrá de mostrar <<El *beced*rio…>>
d) Dada la cadena "El abecedario completo es algo largo y detallarlo exhaustivamente es costoso", mostrar la subcadena desde la primera aparición de <<completo>> excluyendo completo, es decir, deberá mostrarse << es algo largo y detallarlo exhaustivamente es costoso>>. Para ello usa una o varias funciones para cadenas PHP.
<?php
echo '<br>';
echo '### Aqui las vocales ### <br>';
$cadena ="El abecedario completo es algo largo y detallarlo exhaustivamente es costoso";
$vocales = 0;
$consonantes = 0;
foreach (count_chars($cadena, 1) as $i => $val)
{
$letra=$i;
if (preg_match('/[aeiouáéíóúü]/i',chr($i)))
{
$vocales = $vocales + $val;
echo chr( $letra) .' aparece '.substr_count($cadena, chr( $letra)). ' veces <br>';
} else if (preg_match('/[a-z]/i',chr($i)))
{
$consonantes= $consonantes + $val .'<br>';
// chr( $letra).'<br>';
//echo chr( $letra) .' aparece '.substr_count($cadena, chr( $letra)). ' veces <br>';
//chr($cons=$consonantes) .'<br>';
}
}
echo "<br> Vocales: $vocales <br>";
echo '<br>';
echo '### Aqui las consonantes ### <br>';
$cadena ="El abecedario completo es algo largo y detallarlo exhaustivamente es costoso";
$vocales = 0;
$consonantes = 0;
foreach (count_chars($cadena, 1) as $i => $val)
{
$letra=$i;
if (preg_match('/[aeiouáéíóúü]/i',chr($i)))
{
$vocales = $vocales + $val;
} else if (preg_match('/[a-z]/i',chr($i)))
{
$consonantes= $consonantes + $val .'<br>';
echo chr( $letra) .' aparece '.substr_count($cadena, chr( $letra)). ' veces <br>';
}
}
echo "<br> Consonantes: $consonantes <br>";
?>
Se pudo haber mandado a imprimir en uno solo las dos respuestas pero para efectos del ejercicio era mejor separado y aprovecha y cuenta el total de las vocales y consonantes.
-
Hola javano, usar expresiones regulares como bien dices puede ser interesante y útil, aunque dentro del curso para este ejercicio no se pide usar expresiones regulares ya que aún no se han explicado dentro del curso. Por tanto la solución con expresiones regulares podemos verla como "una mejora" o variante del ejercicio.
Saludos.