0

再会,

我正在尝试创建一个莫尔斯电码到文本和文本到莫尔斯电码转换器。

我的代码:

$letter = str_split(strtolower($_POST['text']));
$morse = $_POST['morse'];
$morsecmp = explode(" ",$morse);
$letter = implode(" ",$letter);
$mode = $_POST['sub'];

$morsecode = array(".-","-...","-.-.","-..","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",
            ".--.","--.-",".-.","...","-.","..-","...-",".--","-..-","-.--","--..",".");
$letters = array("a","b","c","d","f","g","h","i","j","k","l","m","n","o","p","q","r",
            "s","t","u","v","w","x","y","z","e");

if($mode == "Text to Morse Code"){  
    $letter = str_replace($letters,$morsecode,$letter);
    $translated = $letter;
}else{
    for($x=0;$x<sizeof($letters);$x++){
        for($y=0;$y<sizeof($morsecmp);$y++){

            if($morsecode[$x] === $morsecmp[$y]){
                echo $morsecode[$x]." === ".$letters[$x]."<br>";
                $morse = str_replace($morsecode[$x],$letters[$x],$morse);
            }
        }
    }
    $translated = $morse;
}

样本输入:

...... .-.. .-.. --- .-- --- .-. .-.. -..

样本输出:

他应得的

预期输出:

你好世界

我的问题是,当从莫尔斯电码转换为文本时,由于 str_replace 限制,某些字符没有被正确捕获,它将替换所有类似于针的字符串,所以如果我必须替换所有“。” 到 e 它也会改变 "...." 这实际上应该是一个 h。

对此的任何帮助将不胜感激。

谢谢你。

4

3 回答 3

1

就在您替换字符时,为字符串添加一个额外的空格search

 $morse = $_POST['morse']." ";  // this is to add an extra space at the end of the morse string.

现在我们用所需的字母替换所有出现的莫尔斯电码字符串,后跟空格。

 $morse = str_replace($morsecode[$x]." ",$letters[$x],$morse);
于 2013-07-25T18:04:50.677 回答
0

首先,您的数组中没有存储完整的字母表。我注意到你缺少'e'。

将莫尔斯电码吹入数组,explode(' ', $morse_code)然后对数组进行替换(使用“/”分隔单词)。

用 将其压缩回字符串implode()

这是一个供您使用的数组,它有整个字母表(您可以使用array_flip切换键和值来来回翻译)

$translator_table = 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' => '--.',
'0' => '-----',
'1' => '.----',
'2' => '..---',
'3' => '...--',
'4' => '....-',
'5' => '.....',
'6' => '-....',
'7' => '--...',
'8' => '---..',
'9' => '----.',
'.' => '.-.-.-',
',' => '--..--',
'?' => '..--.',
);
于 2013-07-25T17:58:57.727 回答
0

替换完全匹配的唯一方法是:

   $morse = preg_replace("#{$morsecode[$x]}#", $letters[$x], $morse, 1); //Limit to 1
于 2019-08-27T09:25:53.093 回答