PHP Práctica de tratamiento de cadenas

Hemos visto una serie de temas que explican como manejar las cadenas con PHP. Ahora es el momento de poner nuestros conocimientos en práctica y por eso vamos a hacer la siguiente práctica de tratamiento de cadenas.
Haremos una pequeña práctica donde recordaremos las funciones más elementales del tratamiento de cadenas, para ello usaremos este texto:

Tratamiento de cadenas con PHP

La carretera principal que va de Baltimore a Nueva York al llegar al kilómetro 12 se cruza con una importante autopista. Se trata de un cruce muy peligroso, y en muchas ocasiones se ha hablado de construir un paso subterráneo para evitar accidentes, aunque todavía no se ha hecho nada.
Un sábado por la noche, el doctor Eckersall regresaba a su casa después de asistir a una sala de fiestas country. Al llegar al cruce redujo la velocidad y se sorprendió al ver a una deliciosa jovencita, vestida con un traje largo, de fiesta, haciendo auto-stop.
Frenó de golpe y le hizo una señal para que subiera a la parte trasera de su descapotable. – El asiento de delante está lleno de palos de golf y de paquetes -se disculpó.
Y a continuación le preguntó:
– Pero, ¿qué está haciendo una chica tan joven como tú sola a estas horas de la noche?
– La historia es demasiado larga para contarla ahora -dijo la chica.
Su voz era dulce y a la vez aguda, como el tintinear de los cascabeles de un trineo.
– Por favor, lléveme a casa. Se lo explicaré todo allí. La dirección es North Charles Street, número XXXX. Espero que no esté muy lejos de su camino.
El doctor refunfuñó y puso el coche en marcha. Cuando se estaba acercando a la dirección que le indicó ella, una casa con las contraventanas cerradas, le dijo:
– Ya hemos llegado.
Entonces se giró y vio que el asiento de atrás estaba vacío.
– ¿¡Qué demonios…!? -murmuró para sí el doctor.
La chica no se podía haber caído del coche, ni mucho menos haberse desvanecido.
LLamó repetidas veces al timbre de la casa, confuso como no lo había estado en toda su vida. Después de un largo tiempo de espera, la puerta se abrió y apareció un hombre de pelo gris y aspecto cansado que lo miró fijamente.
– No sé como decirle qué cosa más sorprendente acaba de suceder -empezó a decir el doctor-, una chica joven me dió esta dirección hace un momento. La traje en coche hasta aqui y…
– Sí, sí, lo sé -dijo el hombre con aire de cansancio-, esto mismo ha pasado otras veces, todos los sábados por la noche de este mes. Esa chica, señor, era mi hija. Murió hace dos años en un accidente automovilístico en ese mismo cruce donde usted la encontró…
La leyenda es falsa:
En algunas versiones de la leyenda, la chica se deja en el coche un libro o bufanda.
En otras, la chica desaparece cuando el coche pasa al lado de un cementerio, y el conductor encuentra el abrigo que le dejó a ella encima de la tumba de una chica que murió de accidente hace algunos años.
Variantes de esta leyenda circulan desde hace siglos, aunque entonces no aparecían coches, sino trenes o caballos.
En otros casos, la autoestopista anuncia alguna profecía antes de desaparecer. En ocasiones, anuncia una primera profecía a corto plazo, que al cumplirse refuerza la segunda, mucho más importante. En USA circuló insistentemente durante la Segunda Guerra Mundial el rumor de que la segunda profecía era la muerte de Hitler en 6 meses.
Según algunos especialistas en folklore, ésta es una de las historias más antiguas que circulan por Europa.
En el Nuevo Testamento ya se habla de un etíope que recoge en su carroza a un hombre, el apóstol Filipo, que le bautiza y después también desaparece.

Ejercicio

Para hacer el ejercicio deberemos pegar el texto en un fichero llamado leyenda_urbana. Observa este ejemplo y haz los ejercicios

<?php
function leer_fichero($nombre)
    {
    $fichero = file($nombre);
    for ($i=0;$i<count($fichero);$i++)
        $fichero[$i]=chop($fichero[$i]);
    return $fichero;
    }

function mostrar_cadena($cadena)
	{
	echo "<p>".$cadena."</p>";
	}
function mostrar_texto($texto)
	{
	foreach ($texto as $numero=>$parrafo)
		mostrar_cadena("<b>Párrafo nº: ".$numero."</b><br/>".$parrafo);
	}
?>

<!DOCTYPE html>
<html lang="es">
<head>
	<meta charset="utf-8"/>
	<title>Trabajando con leyendas Urbanas</title>
</head>
<body>
	<header>
		<h1><a href="index.php">Cadenas en PHP</a></h1>
		<h2>Trabajo con cadenas y textos</h2>
	</header>
	<article>
        <h2><a href="#">La autostopista</a></h2>
        
	</article>
	<?php
	$texto=leer_fichero("leyenda_urbana");
	mostrar_texto($texto);
	?>
	</section>
	</body>
	</html>
  1. Crea una función mostrar… que muestre los párrafos pares en mayúsculas y los impares en minúsculas
  2. Crea una función contar que nos diga la longitud de cada párrafo. ¿Qué longitud tiene la suma de todos los párrafos?
  3. ¿Cual es el párrafo más corto? ¿Y el más largo?
  4. ¿Que carácteres repite más veces en todo el texto? (idea.- Con la función que devuelve un vector con todos los elementos count_chars($parrafo,0) y al lado su numero de repetición podemos ir sumando las repeticiones vector a vector y al final obtenemos un vector con todas las repeticiones donde sólo tendremos que buscar el mayor). Observase este ejemplo:
    <?php
       for ($i=0;$i<=256;$i++)
       	$total[$i]=0;
       $texto=leer_fichero("leyenda_urbana");
       
       foreach ($texto as $numero=>$parrafo)
        		$v[$numero]=count_chars($parrafo,0);
       foreach ($v as $numero=>$parrafo)
       	foreach ($parrafo as $numero2=>$parrafo2)
        		$total[$numero2]+=$parrafo2;
       foreach ($total as $numero3=>$parrafo3)
    		{
    		if ($parrafo3>0)
        		echo "<p>".chr($numero3)."=>".$parrafo3."</p>";
        		}
        ?>
    
  5. Cuantas veces aparece la palabra no (sin importar mayúsculas ni minúsculas) en cada párrafo? ¿Y en todos los párrafos?
  6.  <?php
       $texto=leer_fichero("leyenda_urbana");
       $suma=0;
       foreach ($texto as $indice=>$parrafo)
       	{
       	echo "<p>En el parrafo: $indice, la cadena NO aparece: ".substr_count(strtolower($parrafo),"no")."veces</p>";
       	$suma+=substr_count(strtolower($parrafo),"no");
       	}
       echo "El total de apariciones es $suma"
        ?>
    
  7. Muestra los párrafos ordenados de forma natural
  8. <?php
       $texto=leer_fichero("leyenda_urbana");
       natsort($texto);
       foreach ($texto as $parrafo)
       	echo "<p>$parrafo</p>";
        ?>
    
  9. Muestra el primer y último caracter de cada párrafo
  10. <?php
       $texto=leer_fichero("leyenda_urbana");
       $suma=0;
       foreach ($texto as $indice=>$parrafo)
       	echo "<p>Primer caracter del parrafo $indice: ".$parrafo[0]." y el último es: ".$parrafo[(strlen($parrafo)-1)]."</p>";
        ?>
    
  11. Compara todos los párrafos y devuelve el mayor
  12. <?php
       $texto=leer_fichero("leyenda_urbana");
       $mayor=0;
       for ($i=0;$i<count($texto);$i++)
       	{
       	if (strcmp($texto[$i],$texto[$mayor])>=0)
       			$mayor=$i;	
       	}
        echo "El parrafo mayor en: parrafo_$mayor";
        mostrar_cadena($texto[$mayor]);
        ?>
    
  13. Elimina todas las tíldes
  14. <?php
       $texto=leer_fichero("leyenda_urbana");
       $suma=0;
       foreach ($texto as $indice=>$parrafo)
       	mostrar_cadena(strtr($parrafo,"áéíóú","aeiou"));
        ?>
    
  15. Cambia los espacios por _
  16. ?php
       $texto=leer_fichero("leyenda_urbana");
       $suma=0;
       foreach ($texto as $indice=>$parrafo)
       	mostrar_cadena(str_replace(" ","_",$parrafo));
        ?>
    
  17. Haz que todos los párrafos ocupen el mismo espacio que el mayor de los párrafos rellenando los huecos por la derecha con el caracter #
  18. <?php
        $texto=leer_fichero("leyenda_urbana");
       $mayor=0;
       for ($i=0;$i<count($texto);$i++)
       	{
       	if (strlen($texto[$i])>strlen($texto[$mayor]))
       			$mayor=$i;	
       	}
        foreach ($texto as $cadena)
        	mostrar_cadena(str_pad($cadena,strlen($texto[$mayor]),"#"));
        ?>
    

Originally posted 2011-03-03 18:45:26.

Deja un comentario