Anredenbestimmung !!
-
Hallo Zusammen,
hab diese Aufgabenstellung für eine Anredenbestimmung, wir würdet ihr da am beste Anfangen, ich hab leider keine Erfahrungen in C++,
kurz zur Funktion, in einer Textdatei steht ein feld ID,Anrede,Name,
ich möchte über meine Konsoleanwendung einen Namen eingeben der dann den Namen in der eingelesen txt Datei findet und mir die passende Anrede zum Namen ausgibt
über paar Tipp's würde ich mich freuen.Mfg
Flanders1. bool nameGefunden==false;
2. Name eingeben (mit cin)
3. Datei öffnen (mit ifstream)
4. while-Schleife: solange die Datei nicht am Ende ist (datei.eof ()!=0) und nameGefunden==false
4.1. Zeile aus Datei auslesen (string zeile; datei>>zeile;)
4.2. Zeile auseinanderschnippeln, so daß Du ID, Anrede und Name als jeweils eigene Stringvariable hast
4.3. Wenn der eingegebene Name gleich der Name aus dem String ist:
4.3.1. Anrede ausgeben (bzw.: wenn Geschlecht gleich männlich, dann Ausgabe "Herr", ansonsten "Frau")
4.3.2. nameGefunden=true
5. datei.close ();
-
versteh nicht ganz dein problem
weißt ja eh wie's geht ... damit man hier noch mehr sagen könnte müsstest du den quellcode selbst herzeigen
-
Flanders86 schrieb:
über paar Tipp's würde ich mich freuen.
Auf close kannst du verzichten, das macht der Destruktor von allein. Ansonsten sieht das doch schon ganz gut aus. Wenn du ein konkretes Problem hast, solltest du das etwas genauer beschreiben.
-
Ich hab allgemein ein Problem die Aufgabenstellung umzusetzen in C++ Code, mir fehlt einfach die Erfahrung, ich weiß einfach nicht wie ich beginnen soll

mfg
Flanders
-
Hallo
Fang doch mit dem Einlesen des des eingegebenen Namens an. Dann versucht du mal eine Datei zu öffnen udn den Inhalt zu lesen....
chrische
-
ya bis da hin hab ichs ja und dann fangen die Probleme schon an
-
Hallo
Dann stelle doch mal konkrete Fragen.
kleiner Tipp: Leg eine Klasse und speichere dort erstmal die Werte aus der datei. Dann kanst du den Namen ja mit dem Daten vergleichen.
chrische
-
Flanders86 schrieb:
1. bool nameGefunden==false;
Ist ein Vergleich, keine Initialisierung der Variable.
4. while-Schleife: solange die Datei nicht am Ende ist (datei.eof ()!=0) und nameGefunden==false
kann man auch schreiben als !datei.eof() && !nameGefunden
4.1. Zeile aus Datei auslesen (string zeile; datei>>zeile;)
Hier solltest du eventuell besser getline benutzen, da dir der operator>> meines wissens nur das erste Wort aus der Zeile liefert, aber nicht die ganze Zeile.
4.2. Zeile auseinanderschnippeln, so daß Du ID, Anrede und Name als jeweils eigene Stringvariable hast
Hier findest du eine Uebersicht ueber die Methoden von std::string, damit kannst du dir vermutlich was zusammenbasteln, um die noetigen Werte auszuschnibbeln (z.B. mit find() und substr())
Damit solltest du weiterkommen. Wenn noch Fragen sind, poste einfach mal den Code den du schon hast...
-
okay vielen dank erstmal, ich schau mal wie weit ich komme, danke

-
1. bool nameGefunden=false;
2. Name eingeben (mit cin)
3. Datei öffnen (mit ifstream)
4. while-Schleife: solange die Datei nicht am Ende ist (datei.eof ()!=0) und nameGefunden==false
4.1. Zeile aus Datei auslesen (string zeile; datei>>zeile;)
4.2. Zeile auseinanderschnippeln, so daß Du ID, Anrede und Name als jeweils eigene Stringvariable hast
4.3. Wenn der eingegebene Name gleich der Name aus dem String ist:
4.3.1. Anrede ausgeben (bzw.: wenn Geschlecht gleich männlich, dann Ausgabe "Herr", ansonsten "Frau")
4.3.2. nameGefunden=true
5. datei.close ();Hat da niemand zufällig ne Musterlösung, ich peil gar nichts mehr

-
Hast Du überhaupt schon angefangen? Zeig doch mal wie weit Du bist!
Hausaufgaben macht hier niemand, das müsstest Du inzwischen rausgehört haben

-
Hallo
Für eine Musterlösung musst du wohl bezahlen. Dann lass dich ins Projekteforum verschieben. Ich könnte dir das machen, wenn du willst. Wenn du aber Lust hast etwas zu lernen, solltest du zeigen, was du bisher gemacht hast und dann sagen, warum du jetzt nicht weiter kommst. Anfänge wurde dir doch bereits aufgezeigt.
chrische
-
Flanders86 schrieb:
Hat da niemand zufällig ne Musterlösung, ...
Die Musterlösung hast Du ja bereits in diesem Beitrag bekommen, aber die einzige Reaktion darauf und alle sonstigen Erklärungsversuche war:
Flanders86 schrieb:
... ich peil gar nichts mehr

Aber Deine Hartnäckigkeit ist schon zu bewundern - also nochmal ganz von vorn:
#include <fstream> #include <iostream> #include <string> int main() { using namespace std; ifstream Quelldatei( "neu.txt" ); if( !Quelldatei.is_open() ) { cerr << "Fehler beim Oeffnen" << endl; return -1; } int nr; string sex, name; // Format: 1 male Alexander // 2 female Julia // 3 female Andrea if( Quelldatei >> nr >> sex >> name ) { cout << "Geschlecht: " << sex << endl; cout << "Name: " << name << endl; } else cerr << "Fehler beim Lesen " << endl; return 0; }Jetzt nenne uns doch mal bei jeder Zeile, ob Du das kapierst oder nicht - also etwa so
1.-4. ok
5. unklar - was ist unklar?
6. ok
// usw.Gruß
Werner
-
Hallo
Ich will Geld verdienen.
Sagt nicht zuviel.chrische
-
ne so wichtig ist mir die Aufgabe nicht, dass ich dafür bezahlen würde, soll ja lediglich ne Übung für mich sein, die mit meinem Wissen einfach nicht machbar ist leider, aber danke fürs Angebot

-
Hallo
Du solltest nicht so schnell aufgeben, sondern lernen genau zu beschreiben, was bei dir nicht klappt, dazu Code vorlegen und versuchen das Gesamtproblem in viele kleine AUfgaben zu gliedern und dich dann dem Endziel langsam zu nähern.
chrische
-
Hallo,
die Musterlösung Werner Salomon versteh ich schon vom Aufbau her , nur die Syntax versteh ich teilweise irgendwie nicht ganz, zb. die Zeilen 16-18,
das wo auskommentiert ist, was bedeutet des genau ?Flanders
-
Fang doch erstmal langsam an, z.B. hiermit
-
Flanders86 schrieb:
soll ja lediglich ne Übung für mich sein,
Ne Komplettloesung von uns ist aber keine Uebung fuer dich. Ich kann nur wiederholen was ich und alle anderen schon ein paarmal geschrieben haben: Zeig uns (mit Code, deine numerierte Liste ist ganz sicher kein C++ code) wie weit du bist, und wo deine Probleme beim naechsten Schritt sind. Wir werden dir dann helfen die Probleme zu loesen damit du allein weiter voran kommst. Nur so kannst dus wirklich lernen.
-
Hallo
ADs ist auskommentiert udn stellt nur einen Kommentar dar, der dir das Lesen des Programmes einfacher machen soll. Er weist dort nur auf das Format hin, welches ind er Textdatei verwendet wird und wie dann eben auch ausgelesen werden muss.
chrische
-
ich würde den inhalt der datei auch davor in ne klasse bzw in nen struct packen...
so in etwa:#include <string> struct person { private: const std::string Anrede, Name; public: const string GetAnrede (void) const; //usw person (const std::string &name, const std::string anrede/*...*/) : Anrede (anrede), Name (name) {}; //... }#include <vector> #include <iterator> vector <*person> Personen; typedef vector <*person>::const_iterator cit_p; //constanter iterator von personen string eingabe; cin >> eingabe; string anrede; for (cit_p (Personen.begin ()); cit_p != Personen.end (); ++cit_p) { if (eingabe == (*cit_p)->GetName ()) anrede = (*cit_p)->GetAnrede (); }alternativ kannst du die schleife auch in ne fkt des structs / der klasse hauen...
Zumindest würde ich es so machen - aber hat paar Nachteile, das noch ma zu puffern:
- wenn die Datei iwann sehr groß wird hast du ja alles doppelt (klasse und datei)
- wenn das Programm ständig laufen soll und ohne neustart änderungen der datei übernehmen soll (könnte man auch über nen einlesen aller x minuten machen - aber naja... siehe 1. ^^)alternativ könnte man auch mysql nehmen und die angaben in ne mysql packen oder du schreibst direkt ne klasse, der du so was ähnliches beibringst - aber auch das hat nachteile - wenn du sie geöffnet lässt (damit du sie ne jedes ma wieder öffnen und schließen musst), dann gibt es wahrscheinlich probleme, wenn du sie parallel ändern willst (weiß ich gar nicht genau, aber wär eigtl nicht unlogisch... ^^) oder du musst sie eben doch bei jeder "Query" wieder öffnen und schließen - was jedoch bei vielen Eingaben auch doof ist - musst du selbst wissen...
ich hoffe, dass das mehr hilfreich als irreführend war...
bb
//edit:
'- wenn die Datei iwann sehr groß wird hast du ja alles doppelt (klasse und datei)'logischerweise hast du immer alles doppelt - was auch kein prob ist, wenn die datei nur 10 zeilen oder so hat... aber iwann wirds dann doch doof ^^