Leider verstehe ich nicht, wie ich auf das struct zugreifen kann, damit Buchstabe a auch den Code ausgibt.
else { cout << morse_data[*(ptr + i)].morse_code << "#"; }
funktioniert leider nicht. Ich habe jedoch keine Idee warum. Wenn ich das i aus der Schleife einsetze werden alle Codes strikt der Reihenfolge nach ausgegeben.
Großbuchstaben habe ich bisher bewusst noch nicht berücksichtigt.
Lösung:
Code: Alles auswählen
#include <iostream>
#include <string>
using namespace std;
struct T_Morse_Data
{
char letter;
std::string morse_code;
};
const T_Morse_Data morse_data[] = {
{ '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', "--.." },
{ '0', "-----" },
{ '1', ".----" },
{ '2', "..---" },
{ '3', "...--" },
{ '4', "....-" },
{ '5', "....." },
{ '6', "-...." },
{ '7', "--..." },
{ '8', "---.." },
{ '9', "----." },
// Leerzeichen zur Worttrennung werden im Morsecode
// durch einen Slash '/' umgeben von Leerzeichen
// dargestellt ...
// (Alternative: Trennung durch 3 Leerzeichen)
// Hier bei uns, um die Testläufe eindeutiger zu
// machen: Trennung mittels drei Slashes
{ ' ', "///" },
{ '.', ".-.-.-" },
{ ',', "--..--" },
{ ':', "---..." },
{ '?', "..--.." },
{ '-', "-....-" },
{ '/', "-..-." },
{ '@', ".--.-." },
{ '=', "-...-" }
};
const int morse_data_len = 47;
int main() {
string eingabe = "";
string ausgabe = "";
string code = "";
cout << "Bitte Text eingeben (ggfs. mit Leerzeichen): ? ";
getline(cin, eingabe);
for (int i = 0; i < eingabe.size(); i++) {
if (eingabe.at(i) >= 'A' && eingabe.at(i) <= 'Z') {
eingabe.at(i) += 32;
}
for (int j = 0; j < morse_data_len; j++) {
if (eingabe.at(i) == morse_data[j].letter) {
code = morse_data[j].morse_code;
break;
}
else {
continue;
}
}
ausgabe += code;
cout << ausgabe << "#";
ausgabe = "";
}
cout << endl;
system("PAUSE");
return 0;
}
Code: Alles auswählen
int main() {
char *ptr = new char[morse_data_len];
cin.getline(ptr, morse_data_len);
char p = 0;
for (int i = 0; i < morse_data_len; i++)
{
if (*(ptr + i) == '\0') { break; }
else { cout << morse_data[*(ptr + i)].morse_code << "#"; }
}
system("PAUSE");
return 0;
}