Dj PLL Posté(e) le 30 novembre 2004 Posté(e) le 30 novembre 2004 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!
mogwai93 Posté(e) le 30 novembre 2004 Posté(e) le 30 novembre 2004 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...
mogwai93 Posté(e) le 30 novembre 2004 Posté(e) le 30 novembre 2004 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...
Irgoff Posté(e) le 30 novembre 2004 Posté(e) le 30 novembre 2004 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.
mogwai93 Posté(e) le 30 novembre 2004 Posté(e) le 30 novembre 2004 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
Dj PLL Posté(e) le 30 novembre 2004 Auteur Posté(e) le 30 novembre 2004 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.
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.