Как я могу добавить пространство при декодировании азбуки Морзе

Я сделал программу на 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
}

0

Решение

Проблема заключается в том, что вы используете двойной пробел в выходных данных Морзе для шифровать граница слова, но ваш декодер пропускает все пробелы. Поэтому он также пропускает двойные пробелы, поэтому не знает, где поместить пробел в декодированный вывод.

3

Другие решения

Согласно вики:

Каждый символ (буква или цифра) представлен уникальной последовательностью точек
и тире. Продолжительность тире в три раза больше длительности точки. каждый
за точкой или тире следует короткое молчание, равное продолжительности точки.
буквы слова разделены пробелом, равным трем точкам (одна черта), и
слова разделены пробелом, равным семи точкам. Длительность точки — это
базовая единица измерения времени при передаче кода. [1] Чтобы увеличить скорость
связи, символы кодируются так, чтобы длина каждого символа в
Морс примерно обратно пропорционален его частоте встречаемости в
Английский. Таким образом, самая распространенная буква на английском языке, буква «Е», имеет
кратчайший код, одна точка.

Итак, на мой взгляд:
Два «\ s» должны быть между словами.
Один «\ s» между одним символом.

1

@Neska дал вам базовый ответ, но не объяснил, где пробел интерпретируется.

Когда вы расшифруете тег, ваша логика сможет обнаружить тишину между точками и тире. В противном случае он не сможет определить, где заканчивается отдельный персонаж и начинается следующий персонаж. Эта логика должна определять более длинный (семь точек) интервал между концом слова и началом следующей работы. Вставьте специальный символ (не. Или тире), который будет интерпретироваться как пробел в вашем интерпретаторе азбуки Морзе.

Если вы интерпретируете ввод текста и ищете следующий разделитель (например, пробел) для перевода точек и тире, выведите также разделители. Это поместит в соответствующее количество пробелов

Например

.-^-^^-...^-.--

переводит на

at^by

где символ ^ показывает, где должен быть пробел.

Ваш код переводит это как atby

1

Я нашел решение самостоятельно, и это было довольно просто — я просто добавил

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

перед

 sentence.erase(0,pos + delimiter.length());
0
По вопросам рекламы [email protected]