c in c++
-
danke es läuft soweit,naja es kommen keine fehler meldungen mehr...
meine Exception wirft sofort aus das es den namen schon gibt...
also mal schaun wo ich in der search den fehler eingebaut habe...DANKE!!!
-
hab schon das nächste...
void PhoneBook::insert(string name,string number){ element *eintrag; if(search(name)){ throw xinsert(); return; } inhalt->name=name; inhalt->number= number; inhalt->next = NULL; while(eintrag->next != NULL) eintrag = inhalt->next; eintrag->next = eintrag; }warum gibt er mir ne warnung aus das er eintrag nicht kennt
warning C4700: Lokale Variable 'eintrag' wurde ohne Initialisierung verwendet
-
nja das geht nicht was du da hast. Du musst "eintrag" auch auf was zeigen lassen ... momentan zeigt er ins Nirvana ...
-
aber wenn ich mit der maus auf eintrag->next gehe zeigt er mir das eintrag ein element*eintrag ist, und next element*element::next;ihm sind doch alle bekannt??
-
Ja er kennt die Variablen ... das ist klar. Aber du kannst ja nicht auf irgend eine Stelle im Speicher zeigen und erwarten das du da was verändern darfst!
-
wie kann ich das umgehen und insert liest trotzdem richtig ein?
-
Hallo zusammen,
ich finde der Container map der Standardbibliothek eignet sich ganz hervorragend für solche Aufgaben. Hoffe, dass ich keine Verweise auf std::map beim übergliegen des Themas übersehen habe. Hier meine Lösung (weitesgehend ungetestet
...// phonebook.h #ifndef __PHONEBOOK_H__ #define __PHONEBOOK_H__ #include <string> #include <map> #include <iostream> class PhoneBook { typedef unsigned int value_type; typedef std::map<std::string, value_type> container_type; container_type v; public: typedef value_type number_type; void insert(const std::string &name, number_type number); number_type getNumber(const std::string &name); std::string getName(number_type number); bool listBook(std::ostream &os); }; #endif// phonebook.cpp #include "phonebook.h" using namespace std; void PhoneBook::insert(const string &name, number_type number) { v[name] = number; } PhoneBook::number_type PhoneBook::getNumber(const string &name) { return v[name]; } string PhoneBook::getName(number_type number) { container_type::const_iterator i = v.begin(); while (i != v.end()) { if (i->second == number) return i->first; ++i; } } bool PhoneBook::listBook(ostream &os) { container_type::const_iterator i = v.begin(); while (i != v.end()) { os << i->first << ": " << i->second << endl; ++i; } }// main.cpp #include <iostream> #include <string> #include <cassert> #include "phonebook.h" using namespace std; int main() { PhoneBook v; v.insert("lucky_tux", 1234567); v.insert("Martin", 123); v.insert("P1", 124); v.insert("P2", 125); assert(v.getNumber("lucky_tux") == 1234567); assert(v.getName(1234567) == "lucky_tux"); v.listBook(cout); }Was haltet ihr von diesem Ansatz? Bin wie immer auch über negative Kritik dankbar...
Grüße Martin
-
von deinen Ganzen typedefs halte ich recht wenig ... nutz einfach durchgehen den std::size_t - Typ und fertig.
-
(D)Evil schrieb:
von deinen Ganzen typedefs halte ich recht wenig ... nutz einfach durchgehen den std::size_t - Typ und fertig.
Wie der Name ja schon sagt, ist size_t ursprünglich für Größenangaben gedacht. Deswegen könnte die Verwendung von size_t ein wenig verwirrend sein?
Danke für den Hinweis.
-
hi!
soweit ich das verstehe steht eine ähnliche lösung auf seite eins,
und soweit ich das programm verstehe sind getname und getnummer funktionen(?)die eingegebene werte an insert weiter/zurück geben(noch richtig?)
in meiner aufgabe ist es jedoch so das ich in insert namen und nummer eingeben soll,und es soll durch ein search() im insert() verhindert werden das ein name doppelt vorkommt...
mein getname() und getnummer() sind eigene funktionen die im "buch" nach einem namen bzw. einer nummer suchen, nachdem man eine nummer bzw einen namen eingegeben hat.
dann gibt es noch einen menuepunkt listbook() der die ganze liste ausgeben soll;
und noch delete_it() um einen einzelnen wert zu löschen...
natürlich gibt es auch einen konstruktor und einen dekonstruktor und eine Exception in der search(),die "werfen" soll ob ob es den namen schon gibt...in c ist das eine verkettete liste und läuft ohne probleme...
ob es sowas auch in c++ gibt weis ich nicht,da das mein erstes c++ programm werden soll...
-
Hallo,
in meiner aufgabe ist es jedoch so das ich in insert namen und nummer eingeben soll,und es soll durch ein search() im insert() verhindert werden das ein name doppelt vorkommt...
mein getname() und getnummer() sind eigene funktionen die im "buch" nach einem namen bzw. einer nummer suchen, nachdem man eine nummer bzw einen namen eingegeben hat.Map ist ein Container der STL, welcher jedem Schlüssel einen Wert zuordnet. Diese Schlüssel/Wert-Zuordnung ist eindeutig, d.h. mit der Anweisung v[wert] erzeugst du einen neuen Eintrag sofern "wert" noch nicht als Schlüssel vorhanden ist oder greifst auf den Eintrag zu wenn bereits eine Zuordnung mit "wert" stattgefunden hat.
Grüße Martin
-
Ja,ok.
aber was ist ein container?ist STL die Standardbibliothek,wenn nicht was ist STL?und was ist ein schlüssel?
LG
-
Steffi... schrieb:
Ja,ok.
aber was ist ein container?ist STL die Standardbibliothek,wenn nicht was ist STL?und was ist ein schlüssel?
LGContainer kann man sich als "Behälter" vorstellen, die Objekte (wie z.B. numerische Werte oder Zeichen) enthalten.
Die Standard Template Library (kurz STL) ist ein Teil der Standardbibliothek, welcher Container und Algorithmen bereitstellt, die typunabhängig (als Template) implementiert sind, d.h. die auf jedem beliebigen Typ arbeiten.
Es existieren verschiedene Arten von Containern. Einer von diesen ist die Map, welche aus Schlüssel und Werten besteht. Jedem Schlüssel wird ein Wert zugeordnet. Auf den Wert wird über den Schlüssel zugegriffen. Bsp. Telefonbuch: Jedem Namen wird eine Telefonnummer zugeordnet... Auf die Telefonnummer kann über den Namen zugegriffen werden.
Grüße Martin
-
Steffi... schrieb:
ist STL die Standardbibliothek,wenn nicht was ist STL?
Nein. Die STL war eine C++ Library die von HP entwickelt wurde. Teile der STL wurden in die Standard Bibliothek aufgenommen.
-
Danke an alle es läuft endlich...cu
