paulo1205
(usa Ubuntu)
Enviado em 12/11/2018 - 13:37h
Achei interessante o tópico.
Se o exercício fosse meu, eu acho que tentaria fazer a conversão de texto para Morse com algo parecido com a implementação das funções de <ctype.h>.
const char *tomorse(unsigned char c){
// O código Morse define representações para letras sem acento, algarismos
// e uns poucos sinais de pontuação e letras acentuadas. A tabela abaixo
// associa os code points de caracteres do ISO-8859-1 (subconjunto do Unicode
// superconjunto do ASCII com oito bits e que inclui algumas letras acentuadas)
// a strings, segundo a codificação Morse mais comum. Caracteres sem corres-
// pondente no código Morse produzem um string vazia, e o sinalizador EOF
// produz um ponteiro nulo.
// Fontes: https://morsecode.scphillips.com/morse2.html , https://en.wikipedia.org/wiki/Morse_code
// Nota: não incluí suporte para abreviaturas e códigos de procedimentos.
static const char _MORSE_TO_STRING[256][9]={
// Caracteres de 0 a 31 são os caracteres de controle (faixa C0).
// '\000' '\001' '\002' '\003' '\004' '\005' '\006' '\007'
"", "", "", "", "", "", "", "",
// '\010' '\011' '\012' '\013' '\014' '\015' '\016' '\017'
"", "", "", "", "", "", "", "",
// '\020' '\021' '\022' '\023' '\024' '\025' '\026' '\027'
"", "", "", "", "", "", "", "",
// '\030' '\031' '\032' '\033' '\034' '\035' '\036' '\037'
"", "", "", "", "", "", "", "",
// ' ' '!' '"' '#' '$' '%' '&' '\''
" ", "-.-.--", ".-..-.", "", "", "", ".-...", ".----.",
// '(' ')' '*' '+' ',' '-' '.' '/'
"-.--.", "-.--.-", "", ".-.-.", "--..--", "-....-", ".-.-.-", "-..-.",
// '0' '1' '2' '3' '4' '5' '6' '7'
"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...",
// '8' '9' ':' ';' '<' '=' '>' '?'
"---..", "----.", "---...", "", "", "-...-", "", "..--..",
// '@' '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' '[' '\\' ']' '^' '_'
"-..-", "-.--", "--..", "", "", "", "", "",
// Para letras minúsculas, uso os mesmos códigos das maiúsculas.
// '`' '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' '{' '|' '}' '~' '\177'
"-..-", "-.--", "--..", "", "", "", "", "........", // Livre interpretação minha de DEL ('\177') como o código telegráfico para ignorar/apagar última palavra.
// Caracteres de 128 a 159 são os caracteres de controle (faixa C1).
// '\200' '\201' '\202' '\203' '\204' '\205' '\206' '\207'
"", "", "", "", "", "", "", "",
// '\210' '\211' '\212' '\213' '\214' '\215' '\216' '\217'
"", "", "", "", "", "", "", "",
// '\220' '\221' '\222' '\223' '\224' '\225' '\226' '\227'
"", "", "", "", "", "", "", "",
// '\230' '\231' '\232' '\233' '\234' '\235' '\236' '\237'
"", "", "", "", "", "", "", "",
// '\240' '¡' '¢' '£' '¤' '¥' '\246' '§'
"", "", "", "", "", "", "", "",
// '¨' '©' 'ª' '«' '¬' '\255' '®' '\257'
"", "", "", "", "", "", "", "",
// '°' '±' '²' '³' '´' 'µ' '¶' '·'
"", "", "", "", "", "", "", "",
// '¸' '¹' 'º' '»' '¼' '½' '¾' '¿'
"", "", "", "", "", "", "", "",
// 'À' 'Á' 'Â' 'Ã' 'Ä' 'Å' 'Æ' 'Ç'
".--.-", "", "", "", ".-.-", "", "", "-.-..",
// 'È' 'É' 'Ê' 'Ë' 'Ì' 'Í' 'Î' 'Ï'
".-..-", "..-..", "", "", "", "", "", "",
// '\320' 'Ñ' 'Ò' 'Ó' 'Ô' 'Õ' 'Ö' '×'
"", "--.--", "", "----.", "", "", "", "",
// 'Ø' 'Ù' 'Ú' 'Û' 'Ü' 'Ý' 'Þ' 'ß'
"", "", "", "", "..--", "", ".--..", "",
// 'à' 'á' 'â' 'ã' 'ä' 'å' 'æ' 'ç'
".--.-", "", "", "", ".-.-", "", "", "-.-..",
// 'è' 'é' 'ê' 'ë' 'ì' 'í' 'î' 'ï'
".-..-", "..-..", "", "", "", "", "", "",
// 'ð' 'ñ' 'ò' 'ó' 'ô' 'õ' 'ö' '÷'
"", "--.--", "", "----.", "", "", "", "",
// 'ø' 'ù' 'ú' 'û' 'ü' 'ý' 'þ' 'ÿ'
"", "", "", "", "..--", "", ".--..", ""
};
return _MORSE_TO_STRING[c];
}