Einen Eintrag suchen
- 
					
					
					
					
 Hi, ich bin noch neu in der C++ Szene, also blöde Fragen bitte nicht so eng sehen. Also da ich jetzt schon bissl was mit classes und structs gemacht hab, wollte ich nun mal ein Telefonbuch schreiben indem man aber auch Einträge suchen kann. Nun weiss ich nicht was ich machen muss das man was eingibt und das Programm die Eingabe sucht und die gefundenen Einträge ausgibt. Ich hoffe mal das ist nicht arg sooo schwer und ihr könnt mir helfen. 
 
- 
					
					
					
					
 Welche Datenstruktur hat denn dein telefonbuch? ich vermute mal eine liste oder sowas in der art ,.. also eine liste von classes wie list<my_class> telefonbuch.. naja die classe hat wohl ne nummer, nen namen und nen nachnamen. wenn du nun zB nach einer nummer suchst kann du zB solange die liste durchlaufen bis du die nummer gefunden hast ( was ja eindeutig ist) oder bei namen kannst du zB die liste durchlaufen und mit dem gegebenen namen vergleichen und wenns mehrere sind könntest du einfach alle gefundenen in eine vector oder so packen und denn alle matches mit zB ( wenn du die stl benutzt) std::copy oder so ausgeben.. ansonsten einfach durch den vector iterieren bzw durch das array... 
 wie gesagt sind ein paar ideen aber solange ich nichts genaueres über die struktur deines telefonbuches weiss kann ich leider auch nichts genaueres sagen
 
- 
					
					
					
					
 bin gerade noch am bauen von dem telefonbuch, ich mach es jetz rein mit structs also ungefähr so struct Person { char nachname; char vorname; char strasse; char wohnort; char telefon int hausnummer; int plz; }bin wie gesagt noch dabei, weil ich wollte es schonmal vorher posten da ich nicht gedacht hätte dass so spät noch jemand schreibt. In einer halben Stunde kann ich dir mehr sagen. 
 
- 
					
					
					
					
 Also, ich hab jetzt mal fix was kleines mit structs gemacht wo ein Eintrag drinn ist. Wäre zwar verdammt umständlich wenn man ganz viele solche Einträge macht aber will nur mal schaun wie das funzt mit den Eintrag suchen und danach setz ich mich rann. // loads.h #include <iostream> using namespace std; struct Person { char* nachname; char* vorname; char* strasse; char* wohnort; char* telefon; char* hausnummer; char* plz; };// main.cpp #include "loads.h" int main() { Person Oma; Oma.nachname = "Oma"; Oma.vorname = "Meine"; Oma.strasse = "Omastrasse"; Oma.wohnort = "Omaland"; Oma.telefon = "12345"; Oma.hausnummer = "51"; Oma.plz = "54321"; cin.get(); return 0; }Gehen wir nun mal davon aus das wir nach einen nachnamen suchen. Wie genau muss ich vorgehen. Bin für jede hilfreiche Antwort sehr dankbar 
 
- 
					
					
					
					
 naja solange du kein array oder keine liste oder sonst eine struktur von structs hast musst du ja afaik eh von hand vergleichen .. also mit strncmp() zB für char* 
 ...
 mal 2 kleine fragenwarum nimmst du keine klasse .. denn bei deiner version kann man keinerlei ansatz des willens zur datenkapselung erkennen. ( struct hat per default public atribute /methoden) was ja auch klar ist, sosnt könntest du nicth einfach so drauf zugreifen.. 
 2) warum benutzt du für alle member char*
 statt std::string für strings und int oder so für die zahlen wie hausnummer telefon und plz ?
 
- 
					
					
					
					
 hmm stimmt, jetzt wo du es sagst  ich probier mal was mit classes 
 
- 
					
					
					
					
 du solltest vielleicht rücksicht auf unsere freunde im Osten nehmen und die postleitzahlen auch in string speichern. Dort können plz'en auch mit 0 anfangen  
 
- 
					
					
					
					
 stimmt natürlich, selbiges sollte man auch für telefonnummern bedenken... 
 
- 
					
					
					
					
 hmm sollte das dann ungefähr so aussehen? // main.cpp #include "telefonbuch.h" int main() { telefonBuch oma; oma.SetVorName("Oma"); oma.SetNachName("Amo"); oma.SetStrasse("Omastrasse"); oma.SetStadt("Stadtoma"); oma.SetTelefonNummer(12345); oma.SetHausNummer(51); oma.SetPlz(54321); oma.eintragSuchen(); telefonBuch opa; opa.SetVorName("Opa"); opa.SetNachName("Apo"); opa.SetStrasse("Opastrasse"); opa.SetStadt("Stadtopa"); opa.SetTelefonNummer(18547); opa.SetHausNummer(51); opa.SetPlz(54321); opa.eintragSuchen(); telefonBuch tante; tante.SetVorName("Tante"); tante.SetNachName("etnaT"); tante.SetStrasse("Tantestrasse"); tante.SetStadt("Stadttante"); tante.SetTelefonNummer(12345); tante.SetHausNummer(51); tante.SetPlz(54321); tante.eintragSuchen(); int end; cin >> end; return 0; }// telefonbuch.h #include <iostream> using namespace std; class telefonBuch { private: string m_vorName; string m_nachName; string m_strasse; string m_stadt; int m_telefonNummer; int m_hausNummer; int m_plz; public: void SetVorName(string vorName) { m_vorName = vorName; } string GetVorName() { return m_vorName; } void SetNachName(string nachName) { m_nachName = nachName; } string GetNachName() { return m_nachName; } void SetStrasse(string strasse) { m_strasse = strasse; } string GetStrasse() { return m_strasse; } void SetStadt(string stadt) { m_stadt = stadt; } string GetStadt() { return m_stadt; } void SetTelefonNummer(int telefonNummer) { m_telefonNummer = telefonNummer; } int GetTelefonNummer() { return m_telefonNummer; } void SetHausNummer(int hausNummer) { m_hausNummer = hausNummer; } int GetHausNummer() { return m_hausNummer; } void SetPlz(int plz) { m_plz = plz; } int GetPlz() { return m_plz; } void eintragSuchen() { int auswahl; int eingabe1; int eingabe2; cout << "Wollen Sie nach Telefonnummer oder PLZ suchen?" << endl; cout << "Waehlen Sie 1 wenn Sie nach Telefonnummer suchen oder 2 fuer PLZ" << endl; cin >> auswahl; if(auswahl == 1) { for(int i = 0; i < sizeof(GetPlz()); i++) { if(GetPlz() == eingabe1) { cout << "Treffer: " << i << endl; } else { cout << "Es wurde kein Eintrag gefrunden" << endl; } } } else { for(int i = 0; i < sizeof(GetTelefonNummer()); i++) { if(GetTelefonNummer() == eingabe1) { cout << "Treffer: " << i << endl; } else { cout << "Es wurde kein Eintrag gefrunden" << endl; } } } } };ich hoffe mal das passt so 
 
- 
					
					
					
					
 Du solltest deine telefonBuch Klasse vlt erst noch einmal überarbeiten: Visitenkarte schrieb: Oma Strasse der Oma 99b 
 02345 OmastadtTel (0543)21098-0 
 Fax (0543)21098-111Davon ab ist der Name der Klasse etwas ungünstig, es ist kein telefonBuch sondern lediglich ein Eintrag darin. 
 
- 
					
					
					
					
 Das ist nicht der Sinn von Getter und Setter.