Posté(e) le 30 novembre 200420 a 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) le 30 novembre 200420 a 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) le 30 novembre 200420 a 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) le 30 novembre 200420 a 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) le 30 novembre 200420 a Aucun probleme par contre a faire phrase = phrase + 'X'; puisque la reallocation est automatique. autant pour moi n'utilisant pas le type string, je ne savais pas si la reallocation etait automatique ou non
Posté(e) le 30 novembre 200420 a 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.