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:
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 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.