Sprache in Morsecode übersetzen



  • Hallo.

    Die Aufgabe ist den Nutzer einen Text eingeben zu lassen und dieser soll dann als Morse Code wieder ausgegeben werden.

    Hier mein Code, der halbwegs funktioniert. (Probleme schildere ich unterhalb des Codes)

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    string eins(string random){
        string s;
        for(size_t i=0; i < random.length(); i++){
            char x;
            x = random.at(i);
                switch(x){
    
                    case 'a' : cout << ".- "; break;
                    case 'b' : cout << "-... "; break;
                    case 'c' : cout << "-.-. "; break;
                    case 'd' : cout << "-.. "; break;
                    case 'e' : cout << ". "; break;
                    case 'f' : cout << "..-. "; break;
                    case 'g' : cout << "--. "; break;
                    case 'h' : cout << ".... "; break;
                    case 'i' : cout << ".. "; break;
                    case 'j' : cout << ".--- "; break;
                    case 'k' : cout << "-.- "; break;
                    case 'l' : cout << ".-.. "; break;
                    case 'm' : cout << "-- "; break;
                    case 'n' : cout << "-. "; break;
                    case 'o' : cout << "--- "; break;
                    case 'p' : cout << ".--. "; break;
                    case 'q' : cout << "--.- "; break;
                    case 'r' : cout << ".-. "; break;
                    case 's' : cout << "... "; break;
                    case 't' : cout << "- "; break;
                    case 'u' : cout << "..- "; break;
                    case 'v' : cout << "...- "; break;
                    case 'w' : cout << ".-- "; break;
                    case 'x' : cout << "-..- "; break;
                    case 'y' : cout << "-.-- "; break;
                    case 'z' : cout << "--.. "; break;
                    case ' ' : cout << '/'; break;
                    default : cout << " "; break;
    
                }
            if (random.at(i) == ' ')
            {
                random = random.substr(random.at(i));
            }
        }
    
        return s;
    
    }
    int main(){
        string wort1;
        cout << "Geben Sie bitte einen Satz ein, der als Morsecode wiedergegeben werden soll." << endl;
        cin >> wort1;
        cout << eins(wort1) << endl;
       
    
        return 0;
    
    }
    

    Das Problem ist, dass bei Eingaben mit Leerzeichen die Übersetzung in den Morse Code abbricht und nur die davor stehenden Buchstaben übersetzt werden.

    Dies habe ich versucht durch

    if (random.at(i) == ' ')
            {
                random = random.substr(random.at(i));
            }
    

    zu beheben. Funktioniert leider nicht.

    Mir ist außerdem bewusst, dass Großbuchstaben auch nicht berücksichtigt werden, dies steht nicht im Vordergrund.

    Ich bin für jede Hilfe dankbar und herzliche Grüße

    Mark



  • @marktheshark sagte in Sprache in Morsecode übersetzen:

    Das Problem ist, dass bei Eingaben mit Leerzeichen die Übersetzung in den Morse Code abbricht und nur die davor stehenden Buchstaben übersetzt werden.

    Nein!
    Das Problem ist, dass

    cin >> wort1;
    

    nur bis zum ersten Leerzeichen einliest.

    Das hier:

    Dies habe ich versucht durch

    if (random.at(i) == ' ')
            {
                random = random.substr(random.at(i));
            }
    

    zu beheben. Funktioniert leider nicht.

    ist demnach völlig überflüssig und unnütz ...



  • @Belli sagte in Sprache in Morsecode übersetzen:

    Das Problem ist, dass
    cin >> wort1;

    nur bis zum ersten Leerzeichen einliest.

    Vielleicht auch noch Lösungsvorschläge:

    1. Mit getline einlesen: getline(cin, wort1); - dann liest du einen String bis zum "Enter" und nicht bis zum nächsten Whitespace.
    2. Einfach eine While-Schleife machen:
    while (cin >> wort1) {
        cout << eins(wort1) << endl;
    }
    


  • @wob

    Hey super vielen Dank! Sehr hilfreich!

    👍🏼



  • @Belli ah alles klar! Vielen Dank!
    Gute Hilfestellung!

    👍🏼



  • @wob sagte in Sprache in Morsecode übersetzen:

    getline(cin, wort1);

    wie kann ich denn aber dann dabei meine Eingabe beenden?



  • Enter-Taste?

    Edit:
    Ach so ... Du hast jetzt gleich die Schleife gemacht?



  • @Belli Ja.

    getline(cin, wort1); 
    

    funktioniert bei mir nicht. Bzw. kenn ich den Ausdruck einfach nicht, deswegen fehlt mir eventuell etwas.

    Mit ctrl d kann ich zwar die Eingabe beenden, dann ist aber halt auch jegliche darauffolgende Eingabe nicht mehr möglich.



  • Was heißt: funktioniert nicht?

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    
    	string wort1;
    	getline(cin, wort1);
    	
    	cout << "wort1: " << wort1;
    }
    

    wenn das nicht funktioniert, dann weiß ich auch nicht ...



  • Doofe Frage a Rande: Hat mal jemand herausgefunden, welcher Dozent jedes Jahr die "Tic Tac Toe" und "Morsecode"-Aufgaben stellt und wahrscheinlich einen Link zu diesem Forum in seinen Unterlagen hat? Da sollten wir echt mal nen Forums-Kalender rausbringen, an dem wir ablesen können, was als nächstes für Themen einschlagen.

    Hehe, nichts für ungut. Immer her mit den Fragen, solange sie gut gestellt sind... find ich nur gerade etwas auffällig 😉



  • @Finnegan
    Tatsächlich gibt es keinen Link in seinen Unterlagen. Ich musste mir selbst zu helfen wissen und bin auf dieses Forum und die sehr hilfreiche Community gestoßen.

    LG



  • @marktheshark sagte in Sprache in Morsecode übersetzen:

    @Finnegan
    Tatsächlich gibt es keinen Link in seinen Unterlagen. Ich musste mir selbst zu helfen wissen und bin auf dieses Forum und die sehr hilfreiche Community gestoßen.

    Jo, alles gut. Ich denke auch dass man das Forum hier sehr schnell findet, wenn man nach deutschsprachiger C++-Hilfe sucht. Es gibt nur so ein paar spezielle Sachen wie der Morsecode, die in so regelmässigen Abständen immer wieder auftauchen, dass man fast die Uhr danach stellen kann. Das war keine Kritik an dir, ich fands nur grad lustig 😉

    Ist denn Tic Tac Toe eine der anderen Aufgaben? Das würde mich echt nicht wundern 😆



  • @Belli Funktioniert auch. 🙂



  • @Finnegan Alles gut. Tim Tac The ist auch in den Aufgaben. 😉 Vielleicht gibts dann da auch bald eine Frage in diesem Forum dazu. 😬



  • @marktheshark sagte in Sprache in Morsecode übersetzen:

    @Finnegan Alles gut. Tim Tac The ist auch in den Aufgaben. 😉 Vielleicht gibts dann da auch bald eine Frage in diesem Forum dazu. 😬

    Probiers dann mal am besten zuerst mit der Suchfunktion. Ich denke dass hier schon eine Menge potentieller Fragen zu dem Thema beantwortet wurden. Ist aber auch kein Problem einen neuen Thread zu erstellen, wenn die Antworten nicht exakt passen.


Anmelden zum Antworten