如何在解码莫尔斯电码时添加空格 我用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 } #包括 #包括 使用名称空间std; 字符串翻译符号代码(字符串句子); 字符串解码码(字符串语句); int main() { 串句; 根据维基百科:

如何在解码莫尔斯电码时添加空格 我用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 } #包括 #包括 使用名称空间std; 字符串翻译符号代码(字符串句子); 字符串解码码(字符串语句); int main() { 串句; 根据维基百科:,c++,morse-code,C++,Morse Code,每个字符(字母或数字)由一系列独特的点表示 和破折号。破折号的持续时间是点的持续时间的三倍。每个 点或破折号后面是一个短的静音,等于点的持续时间 单词的字母之间用一个等于三个点(一个破折号)的空格隔开,并且 单词之间用一个等于七个点的空格隔开。点的持续时间为 代码传输中的基本时间测量单位。[1]提高传输速度 在通信过程中,对字符进行编码,以确定每个字符的长度 莫尔斯近似地与它在地震中出现的频率成反比 因此,英语中最常见的字母“E”具有 最短的代码,一个单点 因此,我认为: 单词之间应该有两个“\

每个字符(字母或数字)由一系列独特的点表示 和破折号。破折号的持续时间是点的持续时间的三倍。每个 点或破折号后面是一个短的静音,等于点的持续时间 单词的字母之间用一个等于三个点(一个破折号)的空格隔开,并且 单词之间用一个等于七个点的空格隔开。点的持续时间为 代码传输中的基本时间测量单位。[1]提高传输速度 在通信过程中,对字符进行编码,以确定每个字符的长度 莫尔斯近似地与它在地震中出现的频率成反比 因此,英语中最常见的字母“E”具有 最短的代码,一个单点

因此,我认为: 单词之间应该有两个“\s”。 单个字符之间有一个“\s”。

根据维基:

每个字符(字母或数字)由一系列独特的点表示 和破折号。破折号的持续时间是点的持续时间的三倍。每个 点或破折号后面是一个短的静音,等于点的持续时间 单词的字母之间用一个等于三个点(一个破折号)的空格隔开,并且 单词之间用一个等于七个点的空格隔开。点的持续时间为 代码传输中的基本时间测量单位。[1]提高传输速度 在通信过程中,对字符进行编码,以确定每个字符的长度 莫尔斯近似地与它在地震中出现的频率成反比 因此,英语中最常见的字母“E”具有 最短的代码,一个单点

因此,我认为: 单词之间应该有两个“\s”。
一个“\s”在单个字符之间。

问题在于,您在莫尔斯输出中使用双空格对单词边界进行编码,但您的解码器跳过所有空格。因此,它也跳过双空格,这就是为什么它不知道在解码输出中放置空格的原因。

问题在于您使用双空格编码n你的莫尔斯输出编码一个单词边界,但是你的解码器跳过了所有空格。因此它也跳过了两个空格,这就是为什么它不知道在解码输出中把空格放在哪里的原因。

@Neska给了你一个基本的答案,但没有解释空格在哪里被解释

当您解码标记时,您的逻辑应该能够检测点和破折号之间的静音。否则,它将无法确定单个字符的结束位置和下一个字符的开始位置。该逻辑应该检测较长的字符(七个点长)从一个单词的结尾到下一个单词的开始之间的间隔。在莫尔斯电码解释器中输入一个特殊字符(不是.或破折号)作为空格

如果您要解释文本输入并搜索下一个分隔符(如空格)以转换点和破折号,请同时输出分隔符。这将放入适当数量的空格

比如说

.-^-^^-...^-.--
转化为

at^by
其中,^字符显示空格的位置


您的代码将其翻译为atby

@Neska给了您基本的答案,但没有解释空间的解释位置

当您解码标记时,您的逻辑应该能够检测点和破折号之间的静音。否则,它将无法确定单个字符的结束位置和下一个字符的开始位置。该逻辑应该检测较长的字符(七个点长)从一个单词的结尾到下一个单词的开始之间的间隔。在莫尔斯电码解释器中输入一个特殊字符(不是.或破折号)作为空格

如果您要解释文本输入并搜索下一个分隔符(如空格)以转换点和破折号,请同时输出分隔符。这将放入适当数量的空格

比如说

.-^-^^-...^-.--
转化为

at^by
其中,^字符显示空格的位置


您的代码将其翻译为atby

我自己找到了一个解决方案,它非常简单-我刚刚添加了

else if (" ")
    {
        decode.append(" ");
    }

 sentence.erase(0,pos + delimiter.length());

我自己找到了一个解决方案,非常简单——我只是补充了一句

else if (" ")
    {
        decode.append(" ");
    }

 sentence.erase(0,pos + delimiter.length());

不,它无法获得相同的结果M非常确定它不是那么微笑:(请添加文本而不是屏幕截图。我已经在开始时解释了如何通过decoceMorseCode函数添加空格来分隔结果中的所有单词否,它无法获得相同的结果M非常确定它不是那么微笑:(请添加文本而不是屏幕截图。我已经在开始时解释了如何通过decoceMorseCode函数添加空格来分隔结果中的所有单词。不知道将“/s”放在何处,事实并非如此。有一个
案例“”:
处理单词边界。(你可以说它忽略了换行符)@LightnessRacesinOrbit我用在线转换器测试了我的结果,结果如下same@MSalters我尝试过“”是我的代码,但没有得到所需的结果。我使用decode.append(“”);将下面的内容添加到句子中。擦除(0,pos+delimiter.length());我在每个字符后获得空格,而不是在wordis之后不获取它放置的位置“/s“事实并非如此。有一个
案例“”:
处理单词边界。(你可以说它忽略了换行符)@LightnessRacesinOrbit我用在线转换器测试了我的结果,结果是正确的。”same@MSalters我尝试了“”是我的代码,但没有得到我使用的Decode所需的结果