Aller au contenu

Besoin de petits conseils en c++


Dj PLL

Messages recommandés

Bonjour, dans le cadre d'un projet nous devons faire un programme reproduisant la méthode de codage de Playfair..

Mais voilà j'ai un ptit probleme, il faut ajouter des 'X' dans des digrammes de deux lettres identiques, et aussi a la fin de la chaine si celle ci est impair...

voici le code

void supprx(string& phrase) //procédure permettant d'inserer ou de supprimer un 'X' dans un digramme

{

string tmp; //chaine temporaire

int k; //compteur

k=1;

while (k <phrase.length() )

{

if(phrase.at(k-1) == phrase.at(k) )

{

if(phrase.at(k)=='X')

{

phrase=phrase.erase(k,1); //on supprime le x car il y a deux 'X' dans un digramme

k=k+1;

}

else

{

phrase.insert((k),"X"); //on insere un x dans un digramme de deux lettre identique

k=1;

}

}

else

{

k=k+2;

}

}

if(phrase.length() %2 !=0) //si la phrase est impaire, on ajoute un 'X' en fin de phrase

{

if (phrase.at(phrase.length()-1)=='X')

{

phrase=phrase.erase(phrase.at(k),1);

}

else

{

phrase = phrase + 'X';

}

}

}

mon problème est que lorsque je rentre un phrase impaire se terminant par X ca plante...

Quelqu'un peut-il m'aider?

merci beaucoup!

Lien vers le commentaire
Partager sur d’autres sites

pour ton pb :

if(phrase.length() %2 !=0) //si la phrase est impaire, on ajoute un 'X' en fin de phrase
{
    if (phrase.at(phrase.length()-1)=='X')
    {
        phrase=phrase.erase(phrase.at(k),1);
    }
    else
    {
         phrase = phrase + 'X';
    }
}

ca doit venir du else

phrase = phrase + 'X'

tu dois sans doute déborder la taille de phrase

donc il faudrait que tu augmentes la taille de phrase avant de lui ajouter un caractère

ou alors il faudrait que tu rajoutes des guillemets à la place des apostrophes

faudrait voir comment l'objet string gere l'ajout de texte...

Lien vers le commentaire
Partager sur d’autres sites

Ton probleme vient de l'indice "k" qui est mal gere.

En effet, lors de l'instruction (apres la boucle) :

   phrase=phrase.erase(phrase.at(k),1);

les valeurs possibles de "k" sont :

- longueur de ta phrase

ou

- longueur de ta phrase + 1

dans les deux cas ca plantera car tu essaies d'effacer le caractere phrase.at(k).

Aucun probleme par contre a faire

phrase = phrase + 'X';

puisque la reallocation est automatique.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...