美好的一天,
我正在尝试创建一个莫尔斯代码,以便将文本和文本转换为莫尔斯代码转换器。
我的代码:
$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;
}
示例输入:
.... .- .. ..- .. --- .-- --- .-。 .- .. - ..
示例输出:
编辑了
预期产出:
你好wolrd
我的问题是,当从莫尔斯代码转换为文本时,由于str_replace限制,某些字符无法正确捕获,因为它将替换所有类似于针的字符串,所以如果我必须替换所有&#34;。& #34;它也将改变&#34; ....&#34;这应该是一个h。
对此的任何帮助将不胜感激。
谢谢。
答案 0 :(得分: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);
答案 1 :(得分: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' => '----.',
'.' => '.-.-.-',
',' => '--..--',
'?' => '..--.',
);
答案 2 :(得分:0)
替换完全匹配项的唯一方法是:
$morse = preg_replace("#{$morsecode[$x]}#", $letters[$x], $morse, 1); //Limit to 1