Comunidad PHPeros

Lenguajes => PHP => Mensaje iniciado por: rllancafil en 23 de Octubre de 2015, 18:12:18 pm

Título: comparar 2 string para ver si son anagramas
Publicado por: rllancafil en 23 de Octubre de 2015, 18:12:18 pm
Buenas Tardes, soy nuevo aqui y en php; he estado toda la noche y esta mañana leyendo sobre cómo hacer este asunto:
el usuario me ingresa 2 palabras, y luego comparar si éstas son anagramas.
lo que hice primero fue contar sus letras, si la cantidad no coincide de plano se termina el proceso ya que no es anagrama.
si es de la misma longitud, se comienza a comparar. Quiero, mediante un ciclo for, recorrer la cadena e insertar una coma entre cada letra, luego almacenar esa salida en una variable y convertirla en un arreglo mediante explode, luego hacer un sort, volverla a convertir en string con implode, comparar ambas string nuevas con la funcion similar_text($a, $b, $percent) y si el $percent=100 entonces es anagrama, sino, no es anagrama.
realmente nunca he programado en php ni en nada, no sé si es posible hacer esto o hay otra manera mas eficiente. mi codigo que he usado es el siguiente:
Código: [Seleccionar]
<html>
<head>
<title>Numeros</title>
</head>
<body background=''>
<form method="POST" action="anagrama.php">
Introduce palabras <br><br>
Primera palabra  :
<input type="text" name="palabra1" placeholder=" Palabra 1 ">
<br>
Segunda palabra  :
<input type="text" name="palabra2" placeholder=" Palabra 2 ">
<br>
<input type="submit" name="enviar" value="Enviar">
</form>
<?php

$a 
$_POST["palabra1"];
$b $_POST["palabra2"];
if (
strlen($a)!= strlen($b)){
echo "son palabras distintas!";
}else{

for($i=0;i<strlen($a);$i++){
$a1=$a;
}
for($i=0;i<strlen($b);$i++){
$b1=$b;
}
$array1explode(",",$a1);
$array2explode(",",$b1);
$orden1sort($array1);
$orden2sort($array2);
$ximplode(",",$orden1);
$yimplode(","$orden2);
similar_text($x$y$percent);

if ($percent=100){
echo "son anagramas!";
}else{
echo "no son anagramas!";
}

}
?>

</html>

espero se entienda y me puedan dar alguna sugerencia o idea. Muchas gracias de antemano.
Título: Re:comparar 2 string para ver si son anagramas
Publicado por: FeDe en 28 de Noviembre de 2015, 02:37:41 am
Hola,

Me he tomado la libertad de hacer un pequeño script de 0 y está preparado para trabajar desde PHP CLI con los dos primeros parametros pasado por argumento $argv[1] y $argv[2] (obviamos $argv[0] que es el nombre del fichero). Les he dado el valor $first y $second (como primera y segunda palabra) para que puedas modificarlo fácilmente a un $_POST.
Es bastante más simple de lo que estabas planteando, te resumo un poco lo que realiza este pequeño script:


Aquí el código:

<?php

$first = $argv[1];
$second = $argv[2];

function str2array($str) {
$tmp = [];
for($i=0;$i<strlen($str);$i++) {
$tmp[] = $str[$i];
}
return $tmp;
}
function compareArrayValues($origin, $tocompare) {
foreach($origin as $k=>$v) {
$v2 = $tocompare[$k];
if($v != $v2) return false;
}
return true;

}

if(strlen($first) != strlen($second)) {
throw new ErrorException("Las palabras no coinciden en longitud.");
} else {

$s_first = str2array($first);
sort($s_first);
$s_second = str2array($second);
sort($s_second);

if(compareArrayValues($s_first,$s_second)) {
echo "Sí, son anagramas.";
} else echo "No, no son anagramas";

}
echo PHP_EOL;

?>
Título: Re:comparar 2 string para ver si son anagramas
Publicado por: zetaceo en 30 de Noviembre de 2015, 19:11:56 pm
Estimado, me quedó una duda, disculpando mi ignorancia pero en que momento el usuario indica cuales son las palabras a comparar?

Saludos,
GFS