Duda tonta con ejercicio en PHP

Iniciado por jamatbar, 14 Octubre 2020, 15:34 PM

0 Miembros y 2 Visitantes están viendo este tema.

jamatbar

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:

<?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;
?>

MinusFour

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

jamatbar

¿Y alguna solucion a ese fallo?, probé con ir eliminando el caracter comprobado pero me daba continuamente errores

MinusFour

Cita de: 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

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.

Danielㅤ

#4
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.



       $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
¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!

jamatbar

Cita de: MinusFour en 14 Octubre 2020, 17:02 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.