ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
478
478
EMPFEHLEN
-
Hi,
ich habe 2 Klassen.
Klasse 1 "hash"
Klasse 2 "woerter"
Nun würde ich gerne den struct aus Klasse "hash" durch durch die Klasse "worter" ersetzen.
Ich würde es so machen:
Code cpp:1 2 3 4
private: //struct löschen woerter a[79];
Allerdings weiß ich nun nicht genau wie ich die Methode dh_insert abändern muss.
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
class hash { private: struct Element {string key; //deutsche Wort string info; //englische Wort }; Element a[79]; public: hash() { datei_auslesen(); } //######################################################## ~hash() { zurueck_schreiben(); } //######################################################## int hash(string key) //Erste Hasfunktion {int h = 0; // Hashcode int i, l = key.length(); for (i = 0; i < l; i++) h = (int(key.at(i)) + h*127) % M; return h; } //######################################################## int hash2(string key) //Zweite Hasfunktion (=Schrittweitenfunktion) {int w = 0; // Schrittweite int i, l = key.length(); for (i = 0; i < l; i++) w = (int(key.at(i)) + w*127) % (M - 1); return w; } //######################################################## int dh_insert(string key, string info) //fuegt deutsch-engl. Wortpaar in Hastabelle ein { Element x; x.key = key; x.info = info; int i = hash(x.key); int c = hash2(x.key); int last = (i + (M - 1)*c)%M; while (a[i].key.length() != 0 && a[i].key != x.key && i != last) i = (i+c)%M; if (a[i].key.length() == 0) // Satz einfuegen {a[i].key = x.key; a[i].info = x.info; return 0; //Satz erfolgreich eingefuegt } if (a[i].key == x.key) return 1; //Satz existiert schon else return 2; //Tabelle voll; kein Einfuegen moeglich } ........... };
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
class woerter { private: string key; string info; public: woerter(string einkey = "", string eininfo = "") : key(einkey),info(eininfo) {} //######################################################## void set_key(string const& eingabe_name) { key=eingabe_name; } //######################################################## void set_x_info(string const& eingabe_info) { info=eingabe_info; } //######################################################## string const& get_key() const { return key; } //######################################################## string const& get_info() const { return info; } };
Wäre über ein paar tipps dankbar.Geändert von Krikus (29.05.09 um 16:54 Uhr)
-
29.05.09 15:35 #2
- Registriert seit
- May 2008
- Ort
- Baunatal (Hessen)
- Beiträge
- 413
ja wo liegt das Problem? Wie möchtest du es machen. Ich würde an deiner Stelle eine std Liste benutzen, dann hast du das ganz auch dynamisch als kleiner neben Effekt.
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
#include <list> typedef std::list<woerter*> woerter_list; class hash { private: woerter_list mylist; public: int dh_insert(string key, string info) //fuegt deutsch-engl. Wortpaar in Hastabelle ein { woerter* x = new woerter(); x->get_key = key; x->get_info = info; mylist.push_back(x); // fügt den Zeiger am Ende der Liste ein } //.......... };
deine dh_insert Funktion ist irgendwie sehr komisch habe ich mir nicht wirklich angeschaut was willst du denn da überprüfen?
Ach und wenn du schon Klassen benutz wieso erstellst du kein geiegneten Kunstruktoren z.B. bei der Klasse woerterBei der Geburt ist ein Mensch so unfertig, wie ein an einem schönen blauen Montag in Taiwan hergestellter Computer vor der Programmierung.
- Wolfgang Körner
-
Ich habe bereits obige Problem mit einer Liste gelöst.
Ich soll aber nun diese Liste durch Doppel-Hashing ersetzen.
Das ist ja der Witz bei der Sache.
Der Konstrucktor hinzugfügt.
Hab mal ein bisschen probiert.
Bekomme alldings beim testen eine Zugriffsverletztung. (in der dh_insert Methode kommentiert)
Hier einmal der geänderte Teil:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
class hash_klasse { private: struct Element {string key; //deutsche Wort string info; //englische Wort }; int M; woerter a[79]; public: hash_klasse() { dh_init(); M=79; } //######################################################## ~hash_klasse() { zurueck_schreiben(); } //######################################################## int dh_insert(string key, string info) //fuegt deutsch-engl. Wortpaar in Hastabelle ein { Element x; x.key = key; x.info = info; int i = hash(x.key); int c = hash2(x.key); int last = (i + (M - 1)*c)%M; while (a[i].get_key().length() != 0 && a[i].get_key() != x.key && i != last) i = (i+c)%M; //ZUGRIFFSVERLETZUNG if (a[i].get_key().length() == 0) // Satz einfuegen { //a[i].key = x.key; //a[i].info = x.info; a[i].set_key(x.key); a[i].set_x_info(x.info); return 0; //Satz erfolgreich eingefuegt } if (a[i].get_key() == x.key) return 1; //Satz existiert schon else return 2; //Tabelle voll; kein Einfuegen moeglich } //########################################################
Geändert von Krikus (29.05.09 um 16:57 Uhr)
Ähnliche Themen
-
Pointer in Struct der auf ein Struct Array zeigt?
Von hanni6al im Forum C/C++Antworten: 1Letzter Beitrag: 10.12.08, 12:50 -
Probleme einer TStringList in einer Struct-Klasse
Von Rubilak im Forum Borland CBuilder und VCLAntworten: 5Letzter Beitrag: 28.09.07, 13:58 -
Klasse, Struct und ein Problem
Von M4st3r im Forum .NET ArchivAntworten: 1Letzter Beitrag: 23.03.05, 09:53 -
MD5 Hashing wie es?
Von Wolfman im Forum JavaAntworten: 1Letzter Beitrag: 04.05.04, 21:52 -
re-hashing
Von ohio im Forum PHPAntworten: 7Letzter Beitrag: 10.10.02, 08:57





Zitieren
Login






