Witam.
Od kilku godzin siedzę i nie potrafię znaleźć błędu. Próbuję napisać funkcję (chyba niezbędną do utworzenia programu kodującego huffmanem) zliczającą ilość wystąpień poszczególnych znaków i bezpośrednie wpisanie tej ilości w strukturę.
Funkcja ma kolejno pobierać pojedyncze znaki z ciągu zdanie[]; a następnie sprawdzenie czy taki znak już wcześniej występował.
Jeżeli tak : wskaźnik wskazujący na zmienną "int ile" zwiększa się o 1.
Jeśli nie : litera jest zapisywana w kolejnej, nowo utworzonej strukturze.
Docelowo chciałbym aby funkcja wyświetliła mi częstotliwość występowania znaków. Dodałem kilka komend tekstowych w celu ułatwienia znalezienia problemu.
Finalnie program ma kodować metodą huffmana. Listy i drzewa są dla mnie nowością, więc kod może być lekko (albo nawet bardzo) nieoptymalny. Z góry dziękuje za wszystkie podpowiedzi. Pozdrawiam.
#include "stdafx.h"
#include "string.h"
// zmienne testowe
char zdanie[] = "misisipi";
struct tree{
struct tree *lewo;
struct tree *prawo;
struct tree *dad;
char znak;
int ile=0;
struct tree *next = NULL;
};
void zlicz(tree* head)
{
tree*wsk;
wsk = head;
char c;
int x = strlen(zdanie);
printf("%d", x);
for (int z = 0; z < x; z++)
{
c = zdanie[z];
puts("pobieram litere");
printf("%c\n", c);
if (wsk->next != 0)
{
puts("kolejny element istnieje");
while (wsk != NULL)
{
puts("petla szukajaca znaku");
if (c == wsk->znak)
{
wsk->ile = (wsk->ile + 1);
puts(" dodaje do znaku");
wsk = wsk->next;
break;
}
else break;
}
puts("tworze nowy lisc");
wsk = new tree;
wsk->znak = c;
} else puts("--");
}
puts("koneic petli for");
wsk = head;
while (wsk != NULL)
{
printf("%d\n", wsk->ile);
wsk = wsk->next;
}
}
int main(int argc, char * argv[])
{
struct tree *head = new tree;
head -> next = head;
zlicz(head);
puts("sialala");
return 0;
}