Autor Tema: PHP. Comparar cadenas ¿no funciona? Usar strcmp, ==, ===. Diferencias CU00829B  (Leído 2995 veces)

paramonso

  • Intermedio
  • ***
  • Mensajes: 241
  • El ignorante afirma, el sabio duda y reflexiona.
    • Ver Perfil
Hola. Entrego el ejercicio CU00829B del curso básico de programación web con PHP desde cero.

En los apartados b) y c) he modificado la $cadena para que se vieran los dos resultados.

Código: [Seleccionar]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<title>PHP Desde cero aprenderaprogramar.com</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="generator" content="Geany 1.27" />
<style type="text/css">
      body{  background-color:yellow; color:blue;}
      h1, h2{text-align:center; color:blue;}
      div{
text-align:left;
background-color:orange;
height:1000px;
width:800px;
padding:10px;
margin:20px auto;
}
</style>
</head>
</head>

<body>
<h1>Ejercicio 29 PHP(CU00829B)</h1>
<?php
 
echo ' <div>';
echo 
'<br/>';

//Ejercicio (CU00829B)
$cadena1 ='aprender';
$cadena2 ='aprende';
print 
'<p>EJERCICIO</p>';
print 
'Crear archivos php que ejecuten la tarea indicada:<br/><br/>
a) Dadas las cadenas "aprender" y "aprende", mostrar por pantalla la cadena rellena <br/>
con * a derecha e izquierda en un número de asteriscos que será siempre 5 a cada<br/>
lado aunque se cambien las cadenas.<br/>'
;
echo 
'<strong>'.str_pad($cadena1,18,'*',STR_PAD_BOTH).'<br/>';
echo       
str_pad($cadena2,17,'*',STR_PAD_BOTH).'</strong><br/>';

print 
'<p>b) Dadas las cadenas "aprender" y "aprende", mostrar por pantalla<br/>
si sus tres primeros caracteres son iguales o no usando una función de comparación<br/>
de subcadenas.</p>'
;

compara($cadena1,$cadena2);
$cadena2 ='apirende';
compara($cadena1,$cadena2);
function 
Compara($cadena1,$cadena2)
 {
$a=strncmp ($cadena1$cadena2,3);
if ($a==0)
{print 
"<strong>Los tres primeros caracteres de $cadena1 y $cadena2 son iguales</strong><br/>";}
else {print 
"<strong>Los tres primeros caracteres de $cadena1 y $cadena2 son diferentes</strong><br/>";}
 }
 
print 
'<p>c) Dada la cadena "ApRendEr A proGraMar.cOm" transformar la cadena a  <br/>
          minúsculas y rellenarla a derecha e izquierda con una longitud de asteriscos <br/>
          igual a la mitad de su longitud si es par ó igual a la mitad de (su longitud más 1) <br/>
          si es impar. Mostrar por pantalla la cadena en minúsculas y con el relleno indicado.</p>'
;
$cadena1"ApRendEr A proGraMar.cOm" ;
$cadena2"ApRendEr A proGraMar.cOm1" ;
$Intercambio1=strtolower($cadena1);
$Intercambio2=strtolower($cadena2);
echo 
'<strong>'.str_pad($Intercambio1,strlen($cadena1)*2,'*',STR_PAD_BOTH).'</strong><br/>';
echo 
'<strong>'.str_pad($Intercambio2,strlen($cadena2)*2,'*',STR_PAD_BOTH).'</strong><br/>';

echo 
'<br/>';

echo 
'</div>';
?>


</body>

</html>

Adios.
« Última modificación: 30 de Julio 2017, 20:49 por Ogramar »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:PHP Ejercicio 29 (CU00829B)
« Respuesta #1 en: 22 de Julio 2017, 13:23 »
Buenas.

El apartado "a" no es correcto, el enunciado dice que siempre deben aparecer 5 asteriscos a cada lado de la palabra, aunque se cambien los valores de estas cadenas, y cuando se cambian los valores de las cadenas no se muestran 5 asteriscos a cada lado.

El apartado "c" tampoco es correcto, cuando la cadena es impar se muestran más asteriscos por un lado que por el otro, y siempre debe de haber el mismo número de asteriscos antes que después de la cadena.

Saludos. ;D

paramonso

  • Intermedio
  • ***
  • Mensajes: 241
  • El ignorante afirma, el sabio duda y reflexiona.
    • Ver Perfil
Re:PHP Ejercicio 29 (CU00829B)
« Respuesta #2 en: 22 de Julio 2017, 19:05 »
Hola  :D.

El apartado a) no entendí el enunciado.
Creía que era:
 En dos cadenas dadas de diferente longitud que siempre salieran cinco asteriscos por cada lado.

Este es el código que lo corrige:

Código: [Seleccionar]
$cadena1 ='aprender';
$cadena2 ='aprende';
echo '<strong>'.str_pad($cadena1,strlen($cadena1)+10,'*',STR_PAD_BOTH).'<br/>';
echo                 str_pad($cadena2,strlen($cadena2)+10,'*',STR_PAD_BOTH).'</strong><br/>';

En el apartado c):
 Interpreto: la mitad mas uno (Aunque en este caso no haría falta nada ya que la función ya lo hace).
No sera la mitad de (su longitud menos 1).

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.

De todas las maneras dejo el codigo corregido para que salgan siempre con el mismo número de asteriscos.

Código: [Seleccionar]
$cadena= "ApRendEras1 A proGraMar.cOm" ;
$Intercambio1=strtolower($cadena);
$LenCadena=strlen($cadena);
$resto=$LenCadena%2;
if ($resto==0) {$LenCadena=$LenCadena*2;}
else{$LenCadena=$LenCadena*2-1;}
echo '<strong>'.str_pad($Intercambio1,$LenCadena,'*',STR_PAD_BOTH).'</strong><br/>';

Gracias.
 8)

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:PHP Ejercicio 29 (CU00829B)
« Respuesta #3 en: 22 de Julio 2017, 20:57 »
Ahora es correcto. Como bien dices, puede ser que fuese más correcto, que si la cadena es impar, la mitad se redondee hacia el siguiente entero, o algo parecido.
De todas formas a lo que se refiere es que sea un número par para que pueda haber la misma cantidad de asteriscos a ambos lados.

Saludos. ;D
« Última modificación: 30 de Julio 2017, 20:49 por Ogramar »

 

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".