Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Elanti en 12 de Septiembre 2015, 23:07

Título: PHP funciones count_chars in_array, chr, strstr, str_replace, substr CU00828B
Publicado por: Elanti en 12 de Septiembre 2015, 23:07
Citar
EJERCICIO

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.

Logré resolver correctamente este ejercicio. Pero como siempre hay más de una forma de hacer las cosas, dejo mi código por si alguien tiene algún comentario o sugerencia de mejora:

Código: [Seleccionar]
<?php 
$cad
="El abecedario completo es algo largo y detallarlo exhaustivamente es costoso";
$cad strtolower($cad);
$vocales = array("a","e","i","o","u");

echo 
"<strong>Parte a)</strong><br /><br />";

///////////////////////////PARTE A:   ///////////////////////////////////////////////

foreach ($vocales as $vocal){
    echo 
"La vocal '$vocal' aparece "substr_count($cad,$vocal); 
    switch (
substr_count($cad,$vocal)){
        case 
1:
            echo 
" vez. <br />";
            break;
        default:
            echo 
" veces. <br />";
    }
}

echo 
"<br />";
echo 
"<strong>Parte b)</strong><br /><br />";

///////////////////////////PARTE B:   //////////////////////////////////////////////////

foreach (count_chars($cad,1) as $letra=>$ocurrencias){
    if (
in_array(chr($letra),$vocales)){
        continue;
    }else if (
chr($letra)==" "){
        continue;        
    }else if (
$ocurrencias==1){
        echo 
"La consonante ","'"chr($letra),"'"" aparece "$ocurrencias" vez<br />";
    }
    else{
        echo 
"La consonante ","'"chr($letra),"'"" aparece "$ocurrencias" veces<br />";
    }
}
echo 
"<br />";
echo 
"<strong>Parte c)</strong><br /><br />";

////////////////////////// PARTE C:   //////////////////////////////////////////////////////

echo str_replace("a","*",$cad);
echo 
"<br />";
echo 
"<br />";
echo 
"<strong>Parte d)</strong><br /><br />";

////////////////////////// PARTE D:   //////////////////////////////////////////////////////

$concompleto strstr($cad,"completo");
$sincompleto substr($concompletostrlen("completo"));
echo 
$sincompleto;
?>
Título: Re:PHP funciones count_chars in_array, chr, strstr, str_replace, substr CU00828B
Publicado por: Alex Rodríguez en 13 de Septiembre 2015, 21:57
Hola Elanti, visto y probado el código pienso que está bien resuelto. Has utilizado algunas funcionalidades o instrucciones que no se explican en el curso. Por ejemplo la función in_array para comprobar si un elemento existe dentro de un array, la función chr para obtener la letra asociada a un valor numérico asc ii, etc. Pero bueno, lo importante es que hayas logrado resolverlo por tí mismo y además lo has hecho bien.

Para mostrar "vez" o "veces" has usado un switch evaluando si una vocal aparece una vez o más de una vez. Normalmente si sólo hay una alternativa (en este caso 1 vez ó mas) se hace con un if ¿Por qué lo hiciste con un switch?

Saludos
Título: Re:PHP funciones count_chars in_array, chr, strstr, str_replace, substr CU00828B
Publicado por: Elanti en 13 de Septiembre 2015, 22:09
Hola, Alex:
Gracias por tus comentarios. Efectivamente, estoy complementando lo que aprendo aquí con lo que aprendo en otros sitios, y tomo un poco de aquí y un poco de allá.
Lo de "switch" fue simplemente para probar algo diferente.
¡Saludos!