C ++ конвертировать ASCII в азбуку Морзе

Я делал программу, которая конвертирует буквы, цифры и знаки препинания в азбуку Морзе.

С буквами и цифрами он работает так, как я хочу.

Но с пунктуацией я не могу заставить это работать должным образом. Я надеялся, что кто-нибудь сможет взглянуть на мой код и помочь мне.

#include <iostream>
#include <cstring>
#include <sstream>
using namespace std;char ch;
string morseWord = "";

for(unsigned int i=0; i < word.length(); i++)
{
if(isalpha(word[i]))
{
ch ;
}
}
return morseWord;
}char ch;
string morseWord = "";

for(unsigned int i=0; i < word.length(); i++)
{
if(isdigit(word[i]))
{
ch = word[i];
ch = toupper(ch);
morseWord += morseCode[ch - '0'];
morseWord += " ";

string morseWord = "";

for(unsigned int i=0; i < word.length(); i++)
{
if(ispunct(word[i]))
{
ch = word[i];
ch = toupper(ch);
morseWord += morseCode[ch - '.'];
morseWord += " ";
}
}
return morseWord;
}int main()
{
stringstream ss;
string sentence;
string word = "";

code: " << endl;

while(ss >> ToMorse(word) << endl;
cout << PunctuationToMorse(word) << endl;
}

0

Решение

Ваша основная проблема заключается в том, что вы не предоставили брекеты для while() петля в вашем main() функция:

while(ss >> word) { // <<<< Put an opening brace here
cout << EnglishToMorse(word) << endl;
cout << NumbersToMorse(word) << endl;
cout << PunctuationToMorse(word) << endl;
} // <<<<< ... and a closing brace here

В целом лучший подход будет:

Сопоставьте все известные символы, которые можно преобразовать в азбуку Морзе, используя std::map<char,std::string>и иметь единственную функцию для обработки:

string CharToMorse(char c) {
static const std::map<char,std::string> morseCode = {
{ 'A', ".-" } ,
{ 'B' , "-..." } ,
{ 'C', "-.-." } ,
// ...
{ 'Z', "--.." },
{ '0', ".----" } ,
{ '1', "..---" } ,
{ '2', "...--" } ,
// ...
{ '9', "-----" } ,
{ ' ', "......." } // Consider to support spaces between words
{ '.', ".-.-.-" } ,
{ '!' , "..--.." } ,
{ '?' , "-.-.--"}
};

auto morseString = morseCode.find(toUpper(c));
if(morseString != morseCode.end()) {
return morseString->second;
}
return "";
}

и используйте это как:

int main() {
stringstream ss;
string sentence;

cout << "Enter a English word, number or punctuation: ";
getline(cin, sentence);
ss << sentence;
cout << "Morse code: " << endl;
char c;
while(ss >> c) {
cout << CharToMorse(c);
}
cout << endl;
}

Проблема с вашим реальным кодом состоит в том, что он делает предположения, основанные на отображениях таблицы кодов символов ASCII, и что 'Z' - 'A' == 25,
Это не гарантируется стандартом c ++ и делает ваш код непереносимым (см. Вот также).

1

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

Других решений пока нет …

По вопросам рекламы [email protected]