begin process at 2010 03 20 18:20:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Compression, Split & Cryptage

 > 

Arbre Binaire. Probleme de concatenation


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Arbre Binaire. Probleme de concatenation

samedi 3 juin 2006 à 18:55:02 | Arbre Binaire. Probleme de concatenation

YnOThAr

Bonjour tout le monde !
La fin de l'année arrive et avec elle vient la fin des projets...généralement inachevés. En ce moment je travail sur la compression d'huffman et donc les arbres binaires. Disons que j'ai un petit probleme tout con que je n'arrive pas a résoudre. Je ne pense pas que le probleme vienne de ma fonction et dans ce cas je voudrais savoir pourquoi windows réagit stupidement.

Bon un arbre grosso modo c'est ca :

Bon, si on dit par exemple qu'a un noeud, la branche qui part vers la gauche portera le numéro 1 et celle vers la droite le numéro 0 et qu'a chaque étage on concatène le nom ca donne un truc du genre :
e = "0"
a = "11"
i = "101"
o = "100"

Et mon probleme vient de la fonction qui, une fois l'arbre créer passe dedans pour associé un code de 0 et de 1 a chaque lettre.
Voici la fonction :

char * ajouter_lettre(char * str,char car)
{
     char * str_temp;
     str_temp = malloc((1+strlen(str))*sizeof(char));
     int i;
     for(i=0;i<strlen(str);i++)
             *(str_temp+i) = *(str+i);
     *(str_temp+strlen(str)) = car;
     //printf("%s",str_temp);
     return str_temp;
}

void creer_tab(arbre temp_tree,char * tab[256],char * str_temp)
{
     if(temp_tree -> lettre == -1) {
             creer_tab((*temp_tree).g,tab,ajouter_lettre(str_temp,'0'));
             creer_tab((*temp_tree).d,tab,ajouter_lettre(str_temp,'1'));
     }
     else
     {
             //Etant donné que ca marche pas, j'affiche le résultat pour voir les dégats...
             //tab[temp_tree -> lettre] = malloc(strlen(str_temp)*sizeof(char));
             //tab[temp_tree -> lettre] = str_temp;
             printf("%c : %s\n",(char)(temp_tree -> lettre),str_temp);
     }
}

et le typage des arbres :

typedef struct noeud {
        int lettre; //lettre associe au noeud
        int f; //frequence d'apparition de la lettre
        struct noeud * g; //le fils de gauche
        struct noeud * d; //le fils de droite
} noeud, * arbre;


Et donc voici ce que m'affiche ma fonction creer_tab :


On obtient bien une séie de 1 et de 0 pour chaque lettre, mais y'a des caractères qui se sont invités et moi j'aime pas trop mdr ^^
QQun saurait pourquoi cela fait ca ?
samedi 3 juin 2006 à 20:20:27 | Re : Arbre Binaire. Probleme de concatenation

Bel0

Petit rappel de base: toutes les chaines de caractères doivent se termine par '\0' en C. C'est une convention obligatoire, sinon à peu près toutes les fonctions des api sont foireuses si cette condition n'est pas remplie. Mon conseil serait donc que tu alloues un caractère de plus à chaque fois pour stocker le '\0' final. Belo


Cette discussion est classée dans : temp, tab, str, char, lettre


Répondre à ce message

Sujets en rapport avec ce message

Help sur ma fonction!!! [ par benthebest ] hello a tousVoila je taffe depuis plus d'une semaine sur ma fonction et je vais m'arracher la tete...Elle marche sous Visual C++ et pas sur Dev c++ et listview petit probleme [ par babylone2019 ] Bonjour,voila j'ai creer cette fonction pour inserer du texte dans ma list view, mais bon il me retourne -1 des la fonction ListView_InsertItem();Mais probleme de pointeur [ par jypees ] Bonjour a tous. Voila j'ai l'habitude de faire de la prog sur unix et la je viens de me lancer sur windows (lol) et j'ai un petit probleme car je ne s Gros soucis Ping en c [ par mohken ] Bonjour, J'avais déjà poser une question à ce sujet mais j'ai encore un problème pour pinger. J'ai récupéré une fonction qui permet de le faire sur le string.h, c_str() & char* [ par MyXiLo ] Bonjour,Il y a un petit quelque chose que je ne comprends pas avec les std::string de string.hstd::string Pouet="LALALALa";pr Passer un tableau dynamique en paramètre [ par freepouy18 ] Salut tlm! J'aimerais savoir si je peux ou non passer en paramètre un tableau dynamique  dont je n'ai pas encore alloué de mémoire(allocation à l'inté Comment free un char *** ? [ par kaervas ] Bonjour, j'ai un probleme pour free un char ***,pour le char ** j'utilisais cette fonction (qui a priori marche):void      dfree(char **str){ int    i problème avec des listes > 30 éléments [ par tomalille ] Bonjour,je finalise un programme qui fonctionne parfaitement sauf que je ne peux pas travailler avec une liste de plus de 30 éléments pour le tri par pb de pointeurs !! [ par blinix123 ] Bonjour CPP ! (ici un p'tit nouveau deVB qui se met au C++)Alors voila, dans ce petit programme, j'ai une erreur, je le lance, 0 erreur, mais lors de comparaison d'entiers [ par blinix123 ] Bonjour,Alors petit problème facile pour vous je pense :struct cd{ char realisateur [64]; char titre [64]; char date [20]; char duree [64];}; void


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales