Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: jamatbar en 14 Octubre 2020, 15:34 pm



Título: Duda tonta con ejercicio en PHP
Publicado por: jamatbar en 14 Octubre 2020, 15:34 pm
Buenas tengo un problema, necesito un programa que al introducir una frase te la escriba cada caracter con su siguiente, ejemplo:

Hola que tal --> Ipmb rvf ubm

Los espacios los debe dejar igual, y la "z" debe cambiarse por la "a". ahí viene mi problema, ya que no se por que funciona todo salvo este caso, si meto una "z" por cualquier lado me repite la "a" 25 veces (como el abecedario) y no veo el error. Os dejo el código:

Código:
<?php

$frase = $_POST["frase"];

//Creamos el array del abecedario
        $abecedario = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
       // $abecedariomayus = array_change_key_case($abecedario, CASEUPPER);
        $numletras = count($abecedario);
       
        /*for($i=0;$i<$numletras;$i++){
            echo $abecedario[$i] . "<br>";
            echo strtoupper($abecedario[$i]) . "<br>";
        }*/
        $resultado="";
        for($i=0;$i<strlen($frase);$i++){
            for($j=0; $j<count($abecedario);$j++){
                if($frase[$i]=="z"){
                    $resultado = $resultado.$abecedario[0];
                }else if ((($frase[$i] == $abecedario[$j])) && ($frase[$i] != "z")){
                    $resultado = $resultado.$abecedario[$j+1];
                }else if($frase[$i]==" "){
                    $resultado = $resultado." ";
                }
            }
        }
       
        echo $resultado;
?>


Título: Re: Duda tonta con ejercicio en PHP
Publicado por: MinusFour en 14 Octubre 2020, 15:52 pm
Te la repite 25 veces porque revisas 25 veces si la frase tiene 'z' y como la frase no cambia te sigue agregando la letra 'a'.


Título: Re: Duda tonta con ejercicio en PHP
Publicado por: jamatbar en 14 Octubre 2020, 15:58 pm
¿Y alguna solucion a ese fallo?, probé con ir eliminando el caracter comprobado pero me daba continuamente errores


Título: Re: Duda tonta con ejercicio en PHP
Publicado por: MinusFour en 14 Octubre 2020, 17:02 pm
¿Y alguna solucion a ese fallo?, probé con ir eliminando el caracter comprobado pero me daba continuamente errores

Puedes simplemente agregar a $resultado una vez si el carácter es una 'z'. Piensa que no es necesario hacer una revisión por cada carácter del abecedario porque para hacer el cambio de la 'z' a la 'a' ni siquiera estás usando ese diccionario.

De la misma manera, piensa acerca del " " que ahí tampoco estás usando el diccionario. No estás muy lejos de la solución.


Título: Re: Duda tonta con ejercicio en PHP
Publicado por: Danielㅤ en 14 Octubre 2020, 17:13 pm
Hola, acá el tema es que vos nos tenés que decir o pensar que sigue después de la letra "z", porque obviamente el abecedario termina en la z y vos querés que las letras sean reemplazadas por la letra siguiente del abecedario pero no hay ninguna letra siguiente a z, ahí es donde tenés que hacer con esa letra, con que reemplazarla.

O bien podes hacer que al encontrarse la z la deje como está, es decir que siga con la misma letra y no haya reemplazo o bien que se reemplace por Z mayúscula.

Por otro lado en tu código estás usando 2 bucles que bien podrías usar uno solo y sería suficiente.


Código:
       $resultado="";
        for($i=0;$i<strlen($frase);$i++){
            if($frase[$i]!="z"){
                $resultado += $abecedario[$i + 1]
             }
             else {
                $resultado += 'Z';
        }

Cómo la condición a cumplir es muy simple, podes usar un if de condición simple:

https://www.php.net/manual/es/control-structures.if.php



Saludos


Título: Re: Duda tonta con ejercicio en PHP
Publicado por: jamatbar en 14 Octubre 2020, 17:16 pm
Puedes simplemente agregar a $resultado una vez si el carácter es una 'z'. Piensa que no es necesario hacer una revisión por cada carácter del abecedario porque para hacer el cambio de la 'z' a la 'a' ni siquiera estás usando ese diccionario.

De la misma manera, piensa acerca del " " que ahí tampoco estás usando el diccionario. No estás muy lejos de la solución.

Muchas gracias, he sacado ambos condicionales del buscador en el array y me funciona correctamente.