如何在解码莫尔斯电码时添加空间
我在C++中编写了一个用于编码和解码莫尔斯电码的程序。 我的程序正在运行,解码的消息很好,但没有空格,有没有什么方法可以增加空间。 如何在解码莫尔斯电码时添加空间
#include <iostream>
#include <string>
using namespace std;
string translateMorseCode(string sentence);
string decoceMorseCode (string sentence);
int main()
{
string sentence;
cout<<"Enter word or sentence: ";
getline(cin,sentence);
cout<<"\nMorse Code is:\n";
//convert input message into morse
cout<<translateMorseCode(sentence)<<endl;
//copying morse code into decode string for decoding
string decode = translateMorseCode(sentence);
cout<<"\nDecoding morse code is text"<<endl;
//converting back ito text string
cout<<decoceMorseCode (decode);
return 0;
}
string decoceMorseCode (string sentence)
{
string delimiter = " ";
string decode ="";
int pos = 0;
string token;
while ((pos = sentence.find(delimiter)) != string::npos) {
token = sentence.substr(0, pos);
if(token==".-")
{
decode.append("a");
}
else if(token=="-...")
{
decode.append("b");
}
else if(token=="-.-.")
{
decode.append("c");
}
else if(token=="-..")
{
decode.append("d");
}
else if(token==".")
{
decode.append("e");
}
else if(token=="..-.")
{
decode.append("f");
}
else if(token=="--.")
{
decode.append("g");
}
else if(token=="....")
{
decode.append("h");
}
else if(token=="..")
{
decode.append("i");
}
else if(token==".---")
{
decode.append("j");
}
else if(token=="-.-")
{
decode.append("k");
}
else if(token==".-..")
{
decode.append("l");
}
else if(token=="--")
{
decode.append("m");
}
else if(token=="-.")
{
decode.append("n");
}
else if(token=="---")
{
decode.append("o");
}
else if(token==".--.")
{
decode.append("p");
}
else if(token=="--.-")
{
decode.append("q");
}
else if(token==".-.")
{
decode.append("r");
}
else if(token=="...")
{
decode.append("s");
}
else if(token=="-")
{
decode.append("t");
}
else if(token=="..-")
{
decode.append("u");
}
else if(token=="...-")
{
decode.append("v");
}
else if(token==".--")
{
decode.append("w");
}
else if(token=="-..-")
{
decode.append("x");
}
else if(token=="-.--")
{
decode.append("y");
}
else if(token=="--..")
{
decode.append("z");
}
else if(token=="-----")
{
decode.append("0");
}
else if(token==".----")
{
decode.append("1");
}
else if(token=="..---")
{
decode.append("2");
}
else if(token=="...--")
{
decode.append("3");
}
else if(token=="....-")
{
decode.append("4");
}
else if(token==".....")
{
decode.append("5");
}
else if(token=="-....")
{
decode.append("6");
}
else if(token=="--...")
{
decode.append("7");
}
else if(token=="---..")
{
decode.append("8");
}
else if(token=="----.")
{
decode.append("9");
}
sentence.erase(0,pos + delimiter.length());
}
return decode ; // returnung decoded text
}
//function convert input message into morse return Morse Code as String
string translateMorseCode(string sentence)
{
string MorseCode="";
for(int i=0;i<sentence.length();i++){
switch (sentence[i]){
case 'a':
case 'A':
MorseCode.append(".- ");
break;
case 'b':
case 'B':
MorseCode.append("-... ");
break;
case 'c':
case 'C':
MorseCode.append("-.-. ");
break;
case 'd':
case 'D':
MorseCode.append("-.. ");
break;
case 'e':
case 'E':
MorseCode.append(". ");
break;
case 'f':
case 'F':
MorseCode.append("..-. ");
break;
case 'g':
case 'G':
MorseCode.append("--. ");
break;
case 'h':
case 'H':
MorseCode.append(".... ");
break;
case 'i':
case 'I':
MorseCode.append(".. ");
break;
case 'j':
case 'J':
MorseCode.append(".--- ");
break;
case 'k':
case 'K':
MorseCode.append("-.- ");
break;
case 'l':
case 'L':
MorseCode.append(".-.. ");
break;
case 'm':
case 'M':
MorseCode.append("-- ");
break;
case 'n':
case 'N':
MorseCode.append("-. ");
break;
case 'o':
case 'O':
MorseCode.append("--- ");
break;
case 'p':
case 'P':
MorseCode.append(".--. ");
break;
case 'q':
case 'Q':
MorseCode.append("--.- ");
break;
case 'r':
case 'R':
MorseCode.append(".-. ");
break;
case 's':
case 'S':
MorseCode.append("... ");
break;
case 't':
case 'T':
MorseCode.append("- ");
break;
case 'u':
case 'U':
MorseCode.append("..- ");
break;
case 'v':
case 'V':
MorseCode.append("...- ");
break;
case 'w':
case 'W':
MorseCode.append(".-- ");
break;
case 'x':
case 'X':
MorseCode.append(".-- ");
break;
case 'y':
case 'Y':
MorseCode.append("-.-- ");
break;
case 'z':
case 'Z':
MorseCode.append("--.. ");
break;
case ' ':
MorseCode.append(" ");
break;
case '1':
MorseCode.append(".---- ");
break;
case '2':
MorseCode.append("..--- ");
break;
case '3':
MorseCode.append("...-- ");
break;
case '4':
MorseCode.append("....- ");
break;
case '5':
MorseCode.append("..... ");
break;
case '6':
MorseCode.append("-.... ");
break;
case '7':
MorseCode.append("--... ");
break;
case '8':
MorseCode.append("---.. ");
break;
case '9':
MorseCode.append("----. ");
break;
case '0':
MorseCode.append("----- ");
break;
}
}
return MorseCode;// return Morse Code
}
根据维基:
每个字符(字母或数字)由点 和破折号的一个独特的序列表示。短划线的持续时间是点的持续时间的三倍。每个 点或短划线之后是短暂的静默,等于点的持续时间。单词的字母由等于三个点(一个短划线)的空格分开,并且 这些单词由等于七个点的空格分开。点的持续时间是代码传输中基本的时间测量单位[012]。为了提高通信的速度,对字符进行编码,使得Morse中每个字符的长度与其出现频率大致成反比,其中英文为 。因此,英文中最常见的字母“E”具有最短的代码,即单个点。
所以在我看来: 两个“\ s”应该在单词之间。 单个字符之间的一个“\ s”。
是不明白它在哪里放置“/ s” – 2015-02-23 14:39:55
他说你的莫尔斯是错误的。 – 2015-02-23 14:42:45
事实并非如此。有一个'case':'处理单词的边界。 (你可以争辩说,它忽略换行符) – MSalters 2015-02-23 14:45:47
的问题是,你用你的莫尔斯电输出的双重空间编码一个单词边界,但你的解码器跳过所有空格。因此,它也跳过了双倍空间,这就是为什么它不知道在解码输出中放置空间的位置。
@Neska给你的基本答案,但没有解释空间的解释。
当你得到标签解码你的逻辑应该能够检测点和破折号之间的沉默。否则,它将无法确定单个字符的结束位置和下一个字符的开始位置。该逻辑应该检测单词结尾和下一个工作开始之间的较长(七个点长)间隔。放入一个特殊的字符(不是一个破折号),将其解释为您的莫尔斯电码解释器中的一个空格。
如果您正在解释文本输入并搜索下一个分隔符(例如空格)以便翻译点和破折号,请输出分隔符。这将摆在空间
适当数量例如
.-^-^^-...^-.--
转化为
at^by
其中^字符显示了空间应该。
您的代码转换这是atby
我已经自己找到了解决办法,这是很简单 - 我只是说
else if (" ")
{
decode.append(" ");
}
前
sentence.erase(0,pos + delimiter.length());
没有它不工作越来越相同的结果 – 2015-02-23 14:24:52
m很确定它没有这么微笑:( – 2015-02-23 14:25:38
请添加文本而不是截图 – MSalters 2015-02-23 14:41:43