2017-04-04 2 views
2

Je fais un encodeur et un décodeur php morse pour l'école.
J'ai déjà fait fonctionner l'encodeur mais je n'arrive pas à comprendre comment faire fonctionner le décodeur.

le code ci-dessous est ce que j'ai pour mon décodeur.
J'ai essayé de faire en sorte que le décodeur soit le même que mon encodeur en changeant les lettres avec les codes. Cela n'a pas fonctionné parce que cela aurait embrouillé les lettres morse et les aurait fusionnées.

alors je pense que je dois d'abord obtenir chaque lettre qui a été mis dans le décodeur, les mettre dans un tableau et les décoder séparément, puis les remettre ensemble à la fin.

J'ai essayé beaucoup de choses, mais vraiment je ne sais pas ce que je fais et je ne peux pas le comprendre.
Je suis nouveau à PHP alors j'essaie de le garder aussi simple que possible.
Toute aide est appréciée!coincé sur php morse decoder

<?php 
$break = "<br>" ; 
$Words = $_POST['morse2']; 

//get the morse, seperate each letter and then decode and echo the outcome 

$seperation = explode(" ", $Words); 
var_dump($seperation) ; 
echo $break ; 

// foreach($seperation){ 
// str_replace("/ "," ",$seperation); 
// } 
$seperation = str_replace("/ "," ",$Words); 
$seperation = str_replace(".- ","a",$Words); 
$seperation = str_replace("-... ","b",$Words); 
$seperation = str_replace("-.-. ","c",$Words); 
$seperation = str_replace("-.. ","d",$Words); 
$seperation = str_replace(". ","e",$Words); 
$seperation = str_replace("..-. ","f",$Words); 
$seperation = str_replace("--. ","g",$Words); 
$seperation = str_replace(".... ","h",$Words); 
$seperation = str_replace(".. ","i",$Words); 
$seperation = str_replace(".--- ","j",$Words); 
$seperation = str_replace("-.- ","k",$Words); 
$seperation = str_replace(".-.. ","l",$Words); 
$seperation = str_replace("-- ","m",$Words); 
$seperation = str_replace("-. ","n",$Words); 
$seperation = str_replace("--- ","o",$Words); 
$seperation = str_replace(".--. ","p",$Words); 
$seperation = str_replace(".-. ","r",$Words); 
$seperation = str_replace("... ","s",$Words); 
$seperation = str_replace("- ","t",$Words); 
$seperation = str_replace("..- ","u",$Words); 
$seperation = str_replace("...- ","v",$Words); 
$seperation = str_replace("-.-- ","y",$Words); 
$seperation = str_replace("--.. ","z",$Words); 
$seperation = str_replace("--.- ","q",$Words); 
$seperation = str_replace(".-- ","w",$Words); 
$seperation = str_replace("-..- ","x",$Words); 

$seperation = str_replace(".---- ","1",$Words); 
$seperation = str_replace("..--- ","2",$Words); 
$seperation = str_replace("...-- ","3",$Words); 
$seperation = str_replace("....- ","4",$Words); 
$seperation = str_replace("..... ","5",$Words); 
$seperation = str_replace("-.... ","6",$Words); 
$seperation = str_replace("--... ","7",$Words); 
$seperation = str_replace("---.. ","8",$Words); 
$seperation = str_replace("----. ","9",$Words); 
$seperation = str_replace("----- ","0",$Words); 

echo $seperation; 

    /*Here's a tiny piece of my encoder to show you how i did that 
    basically the same as the decoder, real simple. 
    $Words = $_POST['morse']; 
    $Words = str_replace(" ","/ ",$Words); 
    $Words = str_replace("a",".- ",$Words); 
    $Words = str_replace("b","-... ",$Words); 
    $Words = str_replace("c","-.-. ",$Words); 
    echo $Words; 
    /* 
?> 
+2

c'est un projet intéressant. Que faites-vous dans '$ _POST ['morse2']'? – bowl0stu

+1

Il y a trop de réponses possibles, ou de bonnes réponses seraient trop longues pour ce format. Veuillez ajouter des détails pour affiner le jeu de réponses ou pour isoler un problème auquel vous pouvez répondre en quelques paragraphes. Je vous suggère de trouver un forum de développement (peut-être [Quora] (http://www.quora.com/Computer-Programming)?) Pour élaborer des généralités. Ensuite, lorsque/si vous avez des problèmes de codage spécifiques, revenez à Stack Overflow et nous serons heureux de vous aider. –

+1

* "donc je pense que je dois d'abord obtenir chaque lettre qui a été mise dans le décodeur, les mettre dans un tableau et les décoder séparément, puis les remettre ensemble à la fin." * Cela semble être l'approche parfaite. Qu'est-ce qui a échoué lorsque vous avez essayé cela? –

Répondre

3

C'est une question intéressante. Je l'ai divisé en deux fonctions, un encodeur et un décodeur. Ils ont tous les deux le même tableau, que nous obtenons d'une fonction get_morse() (je divise juste ceci en une fonction séparée donc il fait moins de lignes). Le get_morse() a un espace après chaque code morse, de sorte qu'il n'est pas encombré lorsque vous l'encodez. Nous pouvons facilement rogner cela avec trim() lors du décodage (comme nous divisons la chaîne par les espaces pour obtenir la lettre représentée par chaque code).

function get_morse() { 
    return 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" => "--** "); 
} 

Ensuite, le codeur est très simple,

function morse_encoder($word) { 
    return str_replace(array_keys(get_morse()), get_morse(), strtolower($word)); 
} 

Il remplace essentiellement chaque lettre (ce qui est une clé dans le morse tableau) avec chaque morse code respectif (qui est la valeur dans la tableau). Donc vous obtenez 'a' => "*- " dans le tableau, et remplacez toutes les lettres (clés) par la valeur dans le tableau.

Le décodeur peut probablement être encore simplifié avec quelques fonctions array_*, mais cela fonctionnera et le décodera correctement. Nous utiliserons le même tableau que précédemment, en commençant par get_morse().

function morse_decoder($word) { 
    $morse = array_map("trim", get_morse()); 
    $output = ""; 
    foreach (explode(" ", $word) as $value) { 
     $output .= array_search($value, $morse); 
    } 
    return strtoupper($output); 
} 

Nous avons divisé la chaîne codée par des espaces, ce qui nous donne un tableau avec chaque code de morse en tant qu'élément de son propre. Nous pouvons alors faire une boucle sur ceci, et inverser la procédure que nous avons faite lors de l'encodage; trouver chaque élément dans le tableau correspondant au code morse, et le remplacer par sa clé; quelle est la lettre appropriée.

L'utilisation de ces fonctions serait

echo morse_encoder("sos");   // Output: *** --- *** 
echo morse_decoder("*** --- ***"); // Output: SOS 

Live demo

+0

bel homme de travail, merci! Je vais expérimenter avec ça. – mango

+0

Espérons que ce dont vous avez besoin, et que vous voyez comment votre problème pourrait être résolu avec une autre approche. Si cela a résolu votre problème, veuillez [accepter les réponses] (http://stackoverflow.com/help/accepted-answer), afin que vous puissiez faire savoir aux futurs lecteurs que cela vous a aidé à résoudre votre problème! – Qirel

+0

Ouais désolé, je suis nouveau ici: p Je vais accepter votre réponse, merci pour votre aide! – mango