Problem Zeichenkette...mit trennzeichen..
-
Ich hab ein problem mit meiner Hausaufgabe:
-------------------------------------------
Schreiben Sie eine Klasse Person, die nur eine Instanzvariable vom Typ char [160] enthält, in der aber der Vorname, der Familienname und ein Kennwort abgespeichert werden sollen. Um dies zu erreichen werden die drei Teilstrings durch ':' getrennt in einen String zusammengefasst z.B.:
Hans:Wurst:Kasperlpost
Schreiben Sie einen Konstruktor, der alle drei Teilstrings als Parameter enthält und ein entsprechendes Objekt erzeugt. Weiters wird eine Methode print benötigt, die alle drei Teilstrings durch Leerzeichen getrennt ausgibt, sowie die Methoden print_vorname,print_zuname und print_kennwort, die jeweils den entsprechenden Teilstring am Bildschirm ausgeben.
Beachten Sie, dass die Teilstrings unter Umständen auch das Zeichen ':' enthalten können. Ein üblicher 'Programmiertrick' um dieses Problem zu lösen, besteht darin eventuelle Doppelpunkte in Teilstrings beim Zusammenfassen einfach zu verdoppeln. Aus den Informationen 'James:Geronimo' 'Bond' 'Agent:007' wird dann die Zeichenkette 'James::Geronimo:Bond:Agent::007'. Beim Trennen der Zeichenkette in die einzelnen Teile ist aus doppelten Doppelpunkten einfach wieder ein einfacher zu machen. Einfache Doppelpunkte trennen die verschiedenen Teile.
--------------------------------------------------------
Dazu hab ich angefangen dies zu machen:
---------------------------------------#include<iostream.h> class person { char data[160]; //um die Daten zu speichern! public: //Public für die Funktionen person(char speicher[]); //Constructor der aufgerufen wird ~person(); //Deconstructor der aufgerufen wird void print(); //diverse Prints void print_vorname(); //diverse Prints void print_zuname(); //diverse Prints void print_kennwort(); //diverse Prints }; int main(){ char ram[160]; //Variable wo eingabe gespeichert wird int antwort; do { cout << "* * * PERSON-SPEICHERUNG * * * " << endl; cout << endl; cout << endl; cout <<" M E N U E " << endl; cout << endl; cout << "[1] - PERSON EINGEBEN" << endl; cout << endl; cout << "[2] - PERSON AUSGEBEN" << endl; cout << endl; cout << "[3] - AUSGABE NUR VORNAME" << endl; cout << endl; cout << "[4] - AUSGABE NUR ZUNAME" << endl; cout << endl; cout << "[5] - AUSGABE NUR KENNWORT" << endl; cout << endl; cout << "Bitte waehlen Sie [1, 2,3,4,5 - 6 = Ende]:"; cin >> antwort; cin.ignore(80, '\n'); if( (antwort < 1) || (antwort > 6) ){ cout << "Bitte waehlen Sie [1, 2,3,4,5 - 6 = Ende]:"; } switch(antwort){ case 1:{ cout<<"Bitte geben sie[Vorname:Familienname:Kennwort]: "; cin.getline(ram, 160,); person(ram[160]); } break; } } while(antwort!=6); cout<<"******Programmende******"<<endl; }
----------------------------------------------------
Mein Problem:
der Compiler zeigt mir folgende fehler
test.C: In functionint main()': test.C:52: parse error before
)'
test.C:53: no matching function for call to `person::person ()'
test.C:9: candidates are: person::person(char
test.C:18: person::person(const person &)
-------------------------------------
Ich bin mir nicht sicher ob es so ansatzweise von Logik her gut ist...
Und ich weiss nicht wie ich bei einer Eingabe wie z.B. James::Bond:Agent007 ermögliche das ich zwei mal doppelpunkt benutze...Ich hab gedacht mit cin.getline(data,160,':'); aber dann hätte ich problem dass alle meine doppelpunkte verschwinden doch es soll nur ein character ':' als trennzeichen erkannt werden!? Ich hoffe es gibt jemanden der mir helfen kann! Danke!!!<Hume sagt>Bitte Code-Tags verwenden!</Hume sagt>