Huffman Coding Code rekursiv erstellen

moltomy

Grünschnabel
Hallo.
Ich habe zwar schon mit Hilfe der Suchfunktion versucht mein Problem zu lösen, aber ich hab nichts brauchbares gefunden.
Mein Problem ist folgendes:
Ich will mit einem C++-Programm aus einer Datei die Zeichen auslesen und die Häufigkeit berechnen um daraus den Huffman-Code (will ich nur als Zeichen abspeichern) zu erstellen.
Das hat soweit geklappt und ich habe im Heap-Speicher die Baumstruktur aufgebaut.
Doch nun wollte ich rekursiv den Code erstellen, aber daran scheitere ich bislang.
Hier mein Code der Methode:

Code:
// Meine Token Struktur in der Klasse sieht folgendermaßen aus:
/*	struct token{					 
	 char c, code [MAXBITS];						 Zeichen, Binärcode (Maxbits =7)
	 double h;												Häufigkeit des Zeichens
	 token *pnext_ptr, *p1_ptr, *p0_ptr;			p1_ptr: Zeiger auf die 1 im Baum, p0_ptr: Zeiger auf die 0 im Baum
	 bool set;									
	 };	 
*/
 
// In der Klasse wird mein Zeiger der auf den Stamm zeigt übergeben
 
void huffman::buildcode(token *pointer)
{
if(pointer->p0_ptr!=NULL)	 
{
i=0;
while(pointer->code[i]!='\0')
{
pointer->p0_ptr->code[i]=pointer->code[i];
i++;
}
pointer->p0_ptr->code[i]='0';				//0 hinzufügen
buildcode(pointer->p0_ptr);
}
 
if(pointer->p1_ptr!=NULL)
{
i=0;
while(pointer->code[i]!='\0')
{
pointer->p1_ptr->code[i]=pointer->code[i];
i++;
}
pointer->p1_ptr->code[i]='1';				 // 1 hinzufügen
buildcode(pointer->p1_ptr);
}
}

Bei einer Textdatei mit wenigen Zeichen (z.B. Alphabet a-z)
funktioniert alles einwandfrei. Aber wenn ich eine Textdatei mit z.B. den vollen 128 ASCII Zeichen einlese wird der Code nicht richtig erzeugt, er erzeugt machnmal einen Code mit 17-Bit und dann steigt mein Programm aus.

Wenn jemand eine Lösung weiß wäre ich sehr dankbar.

PS: Gibt es einen Befehl, mit dem man ein Textfeld kopieren kann, wie z.B. text[]=text[]


Gruß, Thomas.
 
Ich kann dir nur zu deinem P.S. was sagen. Es gibt keine direkte
Funktion, aber wenn du dich nicht ganz dumm anstellst, sollte
das mit memcpy funktionieren...

Um dir mehr zu deinem eigentlichen Problem sagen zu können
fehlt mir ein bißchen der Background deines Programms. Z.B.
kann ich nicht nicht der Aussage anfangen, das Programm
erzeuge einen Code von 17 Bit . Aus deiner struct und dem Code
ist das nicht wirklich ersichtlich.

Greets
BadMourming
 
Hallo.

Danke für die Antwort. Ich hänge mal das Programm als Anhang an, falls du mal Zeit und Lust findest dir das Programm anzuschauen.
Das mit den Srings-kopieren hab ich jetzt mit strcpy gelöst, kannte den Befehl vorher nicht.
(Bitte aber nicht kritisieren, das vieles im Programm umständlich ist, ich programmier noch nicht so lange ;) )

Gruß, Thomas.

edit 7.12.04:

Hat sich erledigt, das Programm funktioniert jetzt einwandfrei. Mein Fehler war, dass ich meinte die maximale Bit-Zahl darf nicht größer wie 7 Bit sein, was, wie ich jetzt weiß, ein Fehler ist.
 

Anhänge

  • UEB041.zip
    21,4 KB · Aufrufe: 238
Zuletzt bearbeitet:
Zurück