Aller au contenu

Besoin de petits conseils en c++

Featured Replies

Posté(e)

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!

Posté(e)

tu pourrais rééditer ton code avec les balises 'CODE'

ca rendra plus lisible le code surtout avec les identations

pour ton pb, je suis en train de regarder...

Posté(e)

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

Posté(e)

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.

Posté(e)
Aucun probleme par contre a faire

phrase = phrase + 'X';

puisque la reallocation est automatique.

autant pour moi :mad2:

n'utilisant pas le type string, je ne savais pas si la reallocation etait automatique ou non

Posté(e)
  • Auteur

merci Irgoff, en effet c'était cette erreur d'attention qui faisait que la procédure ne fonctionnait pas.

Merci a vous deux pour votre aide.

Archivé

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