Morsecode Programmieren
-
Hey,
was soll denn putchar machen? Doch wohl ein Zeichen ausgeben und printf auch.
Übrigens alles sehr C-lastig.
-
aah verdammt, klar.. hab des
printf ("%s", morsecode[i]);
rausgemacht und jetzt gehts, vielen dank dafür.Hättet ihr vielleicht nen kleinen, ich sag mal, denkanstoß, wie ich des Morsecode-Text hinbekommen kann?
-
Nur beim kurzen Überfliegen sind mir schon einige Fehler aufgefallen. Korrigier die erst mal.
Und dann kümmere dich um eine vernünftige Formatierung, so blick da ja kein Schwein durch.
-
Warum gibst du bei cout das Zeichen über putchar('-'); und nimmst nicht den Inhalt des aktuellen Array-Elements? Bei mir wird nach Eingabe von "a" ein ".-." und nicht ".-" ausgegeben...
Jockelx schrieb:
Übrigens alles sehr C-lastig.
C-lastig? Ich sehe hier nur C.
-
Ich habe vor nicht allzu langer Zeit einen Decoder geschrieben, der anhand der eingegangenen Morsetöne versucht, sinnvollen Text auszugeben (was oftmals sogar klappt
). Die interpretierten Zeichen (also '.' und '-') werden in einem std::string gespeichert und wenn einige Zeit kein Ton zu hören ist (Pause zwischen 2 Buchstaben), wird die Funktion des Decoders aufgerufen.
Wenn du das mit C++ programmieren möchtest (was eigentlich nur das Einbinden von iostream nahelegt), könntest du eine map (und zwar in beide Richtungen) verwenden. Damit wirds recht einfach:class MorseDecoder { public: typedef std::map<string, char> Morsecodes; MorseDecoder(); ~MorseDecoder(); char Decode(const string& input); private: Morsecodes m_mmap; }; MorseDecoder::MorseDecoder() { m_mmap[".-"] = 'a'; // die restlichen Initialisierungen } char MorseDecoder::Decode(const string& input) { Morsecodes::const_iterator p = m_mmap.find(input); if(p!=m_mmap.end()) return p->second; return '*'; }
Gerade habe ich alles von TCHAR nach char umgestellt, ich hoffe, ich habe nichts vergessen.
Anders herum könntest du ebenfalls eine Map nehmen. Da der Morsecode nicht zwischen Groß- und Kleinschreibung unterscheidet, reicht es, nur die Kleinbuchstaben zu speichern und die Eingaben mittelstolower
jeweils umzuwandeln.~Edit: Doch noch was vergessen~
-
[Rewind] schrieb:
Warum gibst du bei cout das Zeichen über putchar('-'); und nimmst nicht den Inhalt des aktuellen Array-Elements? Bei mir wird nach Eingabe von "a" ein ".-." und nicht ".-" ausgegeben...
Jockelx schrieb:
Übrigens alles sehr C-lastig.
C-lastig? Ich sehe hier nur C.
iostream ist C++ - wird zwar nur inkludiert und nicht verwendet, aber er verwendet wohl einen C++ Compiler
-
[Rewind] schrieb:
Bei mir wird nach Eingabe von "a" ein ".-." und nicht ".-" ausgegeben...
stimmt, aber wenn ich das leerzeichen im code wegmach passts..
also ".-" statt ".- "@yahendrik
Danke für den Tip, werd mich da mal bisschen reinlesen, schaut noch ziemlich fremd für mich alles aus
-
review schrieb:
[Rewind] schrieb:
Bei mir wird nach Eingabe von "a" ein ".-." und nicht ".-" ausgegeben...
stimmt, aber wenn ich das leerzeichen im code wegmach passts..
also ".-" statt ".- "@yahendrik
Danke für den Tip, werd mich da mal bisschen reinlesen, schaut noch ziemlich fremd für mich alles ausDu lernst nicht zufällig mit einem Buch, dessen Autor die Initialen J.W. hat?
-
Achso, noch etwas: du solltest die Schleifen so früh wie möglich verlassen, z.B. deine erste for-Schleife (mit
break
odercontinue
. Oft kann man bei verschachtelten Schleifenreturn
sehr sinnvoll einsetzen)
-
[Rewind] schrieb:
Was macht denn #include "stdafx.h" im Code?
Das ist bei den MS Compilern der Pre-Compiled Header.
Falls Pre-Compiled Header eingeschaltet ist muss dieses include Statement immer an erster Stelle in jeder Source Datei stehen. (Pre-Compiled Header kann global und / oder pro Source Datei ein- oder abgeschaltet werden.)