Autor Tema: Ejercicios PHP resueltos compara cadenas strcmp longitud strlen relleno CU00829B  (Leído 4384 veces)

Cabanota

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 26
    • Ver Perfil
Hola compañeros. Aquí planteo una posible solución a los ejercicios de este tema. Espero me digan si tengo falencias y me digan de que manera puedo optimizar el código. De ante mano, muchas gracias.

Citar
EJERCICIO

Crear archivos php que ejecuten la tarea indicada:

a) Dadas las cadenas "aprender" y "aprende", mostrar por pantalla la cadena rellena con * a derecha e izquierda en un número de asteriscos que será siempre 5 a cada lado aunque se cambien las cadenas.

b) Dadas las cadenas "aprender" y "aprende", mostrar por pantalla si sus tres primeros caracteres son iguales o no usando una función de comparación de subcadenas.

c) Dada la cadena "ApRendEr A proGraMar.cOm" transformar la cadena a minúsculas y rellenarla a derecha e izquierda con una longitud de asteriscos igual a la mitad de su longitud si es par ó igual a la mitad de (su longitud más 1) si es impar. Mostrar por pantalla la cadena en minúsculas y con el relleno indicado.

NOTA: El punto "c" no estoy seguro si esta bueno, porque cuando la cadena es impar le quedan mas asteriscos del lado derecho que del izquierdo y creo que ese no es el objetivo. me gustaría saber si entendí bien el ejercicio o que. Gracias.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
</head>
<body>
<?php
$cadena1 "aprender";
$cadena2 "aprende";
$cadena3 "ApRendEr A proGraMar.cOm";

//punto a.
echo str_pad($cadena1, (strlen($cadena1)+10), "*"STR_PAD_BOTH). "<br/>";
echo str_pad($cadena2, (strlen($cadena2)+10), "*"STR_PAD_BOTH). "<br/>";

echo "-----------------------------------------<br/>";

//punto b.

for ($i=0$i 3$i++) { 
$aux1 substr($cadena1$i1);
$aux2 substr($cadena2$i1);
if (strcmp($aux1$aux2) == 0) {
echo "\"" $aux1 "\" es igual a \"" $aux2 "\".<br/>";
}else{
echo "\"" $aux1 "\" es diferente de \"" $aux2 "\".<br/>";
}
}

echo "-----------------------------------------<br/>";

//punto c.

$tranosformada strtolower($cadena3);
$resul = (strlen($tranosformada) % 2);
$aux strlen($tranosformada);

if ($resul == 0) {
$longitud $aux + ($aux 2);
echo "Resul: " str_pad($tranosformada$longitud,"*" STR_PAD_BOTH);

}else{
$longitud $aux + (($aux 2) + 1);
echo "Resul: " str_pad($tranosformada, ($longitud),"*" STR_PAD_BOTH);
}
?>

</body>
</html>
« Última modificación: 21 de Junio 2015, 17:26 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Hola, el punto a) lo tienes perfecto, es decir, si se cambia la longitud de la palabra siguen mostrándose siempre cinco asteriscos a derecha e izquierda

El punto b) haz hecho una comparación de cada letra. Podrías completarlo añadiendo si las tres letras (en conjunto) son iguales o no. Abajo te pongo cómo sería el código con este añadido.

El punto c)

La cadena "ApRendEr A proGraMar.cOm" tiene una longitud de 24 caracteres (incluyendo los espacios).

La mitad es 12. Por tanto debería rellenarse con 12 asteriscos a derecha e izquierda. En tu código tienes escrito

$longitud = $aux + ($aux / 2);

De este modo la nueva longitud es 24 más 12 que quedan como 6 asteriscos + 24 caracteres + 6 asteriscos

Para rellenar con 12 asteriscos a derecha e izquierda simplemente usaríamos $longitud = 2*$aux; para el caso de que sea par, de este modo la cadena pasa a tener 48 caracteres y se conforma así: 12 asteriscos + 24 caracteres + 12 asteriscos.


Supongamos que la cadena tenga 25 caracteres. En este caso la mitad resulta 12.50 y usamos entones la mitad de su longitud más uno, es decir la mitad de 26 que es 13. La cadena tiene que quedar con 13 asteriscos a la izquierda + 25 caracteres + 13 asteriscos a la derecha, total de 51 caracteres. Aquí la cadena era de 25 y el relleno en total es de 26.

Para lograr esto usamos $longitud = 2*$aux + 1;

De este modo siempre quedan el mismo número de asteriscos al lado derecho e izquierdo.

El código con estos pequeños cambios queda así:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
</head>
<body>
<?php
$cadena1 "aprender";
$cadena2 "aprende";
$cadena3 "ApRendEr A proGraMar.cOm";

//punto a.
echo str_pad($cadena1, (strlen($cadena1)+10), "*"STR_PAD_BOTH). "<br/>";
echo str_pad($cadena2, (strlen($cadena2)+10), "*"STR_PAD_BOTH). "<br/>";

echo "-----------------------------------------<br/>";

//punto b.
$tresLetrasSonIguales true;
for ($i=0$i 3$i++) { 
$aux1 substr($cadena1$i1);
$aux2 substr($cadena2$i1);
if (strcmp($aux1$aux2) == 0) {
echo "\"" $aux1 "\" es igual a \"" $aux2 "\".<br/>";
}else{
$tresLetrasSonIguales false;
echo "\"" $aux1 "\" es diferente de \"" $aux2 "\".<br/>";
}
}
echo '<br/> Como resultado final podemos decir que las tres letras son: ';
if ($tresLetrasSonIguales == true) { echo 'iguales';} else {echo 'no iguales';}

echo "<br/>-----------------------------------------<br/>";

//punto c.

$tranosformada strtolower($cadena3);
$resul = (strlen($tranosformada) % 2);
$aux strlen($tranosformada);

if ($resul == 0) {
$longitud 2*$aux;
echo "Resul: " str_pad($tranosformada$longitud,"*" STR_PAD_BOTH);

}else{
$longitud 2*$aux 1;
echo "Resul: " str_pad($tranosformada, ($longitud),"*" STR_PAD_BOTH);
}
?>

</body>
</html>

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".