Dj PLL Posté(e) le 30 novembre 2004 Partager 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! Lien vers le commentaire Partager sur d’autres sites More sharing options...
mogwai93 Posté(e) le 30 novembre 2004 Partager 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... Lien vers le commentaire Partager sur d’autres sites More sharing options...
mogwai93 Posté(e) le 30 novembre 2004 Partager 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... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Irgoff Posté(e) le 30 novembre 2004 Partager 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
mogwai93 Posté(e) le 30 novembre 2004 Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dj PLL Posté(e) le 30 novembre 2004 Auteur Partager 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.