Probleme Morse zu Text
-
Hallo!
Habe ein Problem. Es geht darum ein Programm in C++ zu schreiben, das Text in Morsezeichen ausgibt oder, je nach Wunsch, Morse in Text.
Ersteres funktioniert auch wunderbar, bis auf das kleiner Prob mit den Umlauten.
Nur der Part: Morse in Text will nicht.
Hier mal mein code:#include <cstdlib> #include <iostream> #include <string> using namespace std; int i = 0, k = 0; char charinput; char * token; char * morse[] = {"*-","*-*-","-***","-*-*","-**","*","**-*","--*","****","**","*---","-*-","*-**","--","-*","---","---*","*--*","--*-","*-*","***","-","**-","**--","***-","*--","-**-","-*--","--**","-----","*----","**---","***--","****-","*****","-****","--***","---**","----*"," "}; char zeichen[] = {'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',' '}; void texttomorse() { cout << "Bitte den umzuwandelnden Text eingeben: " << endl; while (charinput = getchar()) { for (i = 0; i < 41; i++) { if (charinput == zeichen[i]) { cout << morse[i]; cout << " "; } } } cout << endl; } void morsetotext() { char test[256]; cin.getline(test,256); cout<<"Bitte Morsezeichen eingeben"<<endl; cin.getline(test,256); token = strtok(test," "); if (token) { while ( (token = strtok(NULL, " ")) ) { for (k = 0; k < 41;k++) { if(token == morse[k]) { cout << zeichen[k] << endl; } } } } } int main(int argc, char *argv[]) { int j = 0; cout << "Was moechten Sie tun?" << endl; cout << "<1> Text in Morse umwandeln" << endl; cout << "<2> Morse in Text umwandeln" << endl; cout << "<3> Ausgabe einer tabellarischen Uebersicht" << endl; cin >> j; switch (j) { case 1: texttomorse(); break; case 2: morsetotext(); break; case 3: break; default: cout << "Ungueltige Eingabe" << endl; } system("PAUSE"); return EXIT_SUCCESS; }Danke schonmal im Vorraus
-
Du vergleichst char-Zeiger miteinander, das ist glaubich nicht das, was du willst! Denn du willst ja nicht die Adressen vergleichen, die in den Zeigern drinstehen, sondern die Zeichenketten an den Adressen. Soll heißen, mit a==b vergleichst du die Adressen, mit strcmp(a,b)==0 vergleichst du die Zeichenketten dahinter

Und die Variable "token" könntest du jeweils in der jeweiligen Funktion deklarieren. Ist zwar nur ein Schönheitsmakel, aber es gibt keinen Grund (außer ich hab was übersehen), dass das Ding global sein muss.
-
Das ist kein Problem deines Programmes, sondern ein Problem mit dem Zeichensatz

http://www.c-plusplus.net/forum/viewtopic-var-p-is-284402.htmlWenn du also dein Array mit den entsprechenden ANSI-Codes statt den char-Konstanten fütterst, sollte es funktionieren...
Grüße
Martin
Edit: ich meinte natürlich die Umlaute
-
danke für die schnellen antworten.
hat alles wunderbar geklappt