Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme compression RLE

bugs bizzares ^^

Sujet résolu
    1 juin 2008 à 14:53:45

    Bonjourr :)
    Actuellement, je programme l'application proposee sur la page des exercices et je suis confronte a un bug :colere2: En faite je suis en train de coder la compression d'une chaine de characteres avec '@' comme flag. Mon premier probleme est que le code ne marche qu'avec 28 characteres ou moins. Apres, il bug. Mon deuxieme probleme est affich si-dessous:
    Flag:@
    Chaine non-compressee: AAAAAAAABBBBBFCCCCCNYYYYYIR0
    Chaine compressee    : 7@A1@A3@B2@B1@F3@C2@C1@N3@Y2@Y1@I1@R1@0

    Si je change la chaine et je mets deux 0 au lieu de deux A au debut...
    Chaine non-compressee: 00AAAAAABBBBBFCCCCCNYYYYYIR0
    Chaine compressee    : 7@01@A3@B2@B1@F3@C2@C1@N3@Y2@Y1@I1@R1@0

    o_Oo_Oo_O
    Mon code:
    string rle_encoder::getEncodedText()// on compresse 
    {
        int a=0;// compteur de caracteres
        int i[2^32-1]={0};// chaque "case" du tableau contiendra le nombre de characteres identiques
        int n=0;//encore un compteur
        int j=0;//...encore un compteur
        int c=0;//......encore un compteur
        int b=0;//...devinez xP
        string iStr;// i en string
    
        while(a<m_original_text.size())//tant que a est plus petit que la longeur de la chaine...
        {
            if(m_original_text[a+j]==m_original_text[a+j+1])//si le charactere actuel est egal au charactere actuel+1
            {
    
                i[c]=j+1;//alors la premiere case est egale au charactere actuel dans la chaine de memes characteres....et puisque le prochain charactere est le meme, on fait +1
                j++;//+1 meme charactere 
            }
            else//sinon
            {
                i[c]+=1;//on ajoute 1 dans la case(si le nombre n'a pas
                c++;//on change de case
                j=0;//on remet le compteur de meme characteres a zero
            }
        a++;//+1 charactere "parcouru"
        }
        while(n<=a)//tant que n est plus petit que a(mesure pour le cas toute la chaine est composee de characteres differents
        {
            if(i[n]!=0 && n!=0)//is le nombre de characteres actuels n'est pas zero et ce n'est pas le premier charactere parcouru
            {
                ostringstream oss;//convertion
                oss<<i[n];//de int
                iStr=oss.str();//en string
                m_encoded_text+=iStr+"@"+m_original_text[b+i[n]-1];//numero de memes characteres + @ + lettre ( nombre de lettres parcourues + numero de memes lettres actuel - 1 (car les chaines commencent par 0))
                b+=i[n];//nombre de lettres parcourues au total += nombre de lettres parcourues dans ce if
            }
            else if(n==0)//si c'est la premiere case
            {
                ostringstream oss;//convertion
                oss<<i[n];//de int
                iStr=oss.str();//en string
                m_encoded_text+=iStr+"@"+m_original_text[0];// nombre de memes lettres + @ + premiere lettre
                b+=i[n];//nombre de lettres parcourues au total += nombre de lettres parcourues dans ce if
            }
        n++;//nombre de case parcourues ++
        }
        return m_encoded_text;// on donne le texte compresse a l'utilisateur 
    }
    Merci d'avance, Shamanas 
    
    • Partager sur Facebook
    • Partager sur Twitter

    Probleme compression RLE

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown