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: paramonso en 16 de Julio 2017, 11:58

Título: PHP. Comparar cadenas ¿no funciona? Usar strcmp, ==, ===. Diferencias CU00829B
Publicado por: paramonso en 16 de Julio 2017, 11:58
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.
Título: Re:PHP Ejercicio 29 (CU00829B)
Publicado por: pedro,, 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
Título: Re:PHP Ejercicio 29 (CU00829B)
Publicado por: paramonso 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)
Título: Re:PHP Ejercicio 29 (CU00829B)
Publicado por: pedro,, 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