Vérifier un palindrome avec des manipulations de chaine de caractères

0/5 (5 avis)

Snippet vu 13 824 fois - Téléchargée 32 fois

Contenu du snippet

Mot code en gros sert à vérifier si votre chaine de caractères est un palindrome. J'ai réussi à faire mon code de façon à ce que l'on puisse ajouter un point, des majuscules ,les accents et des espaces sans modifier le résultat finale. La seule chose que ça ne vérife pas c'est si le mot existe.

Source / Exemple :


<HTML>
<HEAD>
<TITLE>Palindrome </TITLE>
<SCRIPT language="javascript">
function vérifiéPhrase(phrase)
{
 phrases = new String(phrase) // Initie le string
 phrases = phrases.toLowerCase() // Met tout les caractères en minuscule
 var len = phrases.length;  // Initie le longeur du string ( seulement pour la boucle qui suit )
 //for (i=0;i<len;i++) // Enlève les caractères inutiles et remplace les accents
 caractere_spec = new Array (" ",".",",","!","?","-","_","\\","'","(",")","$","&","%","*")
 lettre_a = new Array("à","â","ä")
 lettre_e = new Array("è","é","ê","ë")
 lettre_i = new Array("ì","î","ï")
 lettre_o = new Array("ò","ô","ö")
 lettre_u = new Array("ù","û","ü")
  for (i=0;i<caractere_spec.length;i++)
  {
   for (x=0;x<len;x++)
   {
   phrases = phrases.replace(caractere_spec[i],"")
   if (phrases.indexOf(caractere_spec[i],0) < 0) break;
   }
  }
  for (i=0;i<lettre_a.length;i++)
  {
   for (x=0;x<len;x++)
   {
   phrases = phrases.replace(lettre_a[i],"a")
   if (phrases.indexOf(lettre_a[i],0) < 0) break;
   }
  }
  for (i=0;i<lettre_e.length;i++)
  {
   for (x=0;x<len;x++)
   {
   phrases = phrases.replace(lettre_e[i],"e")
   if (phrases.indexOf(lettre_e[i],0) < 0) break;
   }
  }
  for (i=0;i<lettre_i.length;i++)
  {
   for (x=0;x<len;x++)
   {
   phrases = phrases.replace(lettre_i[i],"i")
   if (phrases.indexOf(lettre_i[i],0) < 0) break;
   }
  }
  for (i=0;i<lettre_o.length;i++)
  {
   for (x=0;x<len;x++)
   {
   phrases = phrases.replace(lettre_o[i],"o")
   if (phrases.indexOf(lettre_o[i],0) < 0) break;
   }
   for (x=0;x<len;x++)
   {
   phrases = phrases.replace(lettre_u[i],"u")
   if (phrases.indexOf(lettre_u[i],0) < 0) break;
   }
  }
  for (x=0;x<len;x++)
  {
    phrases = phrases.replace("ÿ","y")
    phrases = phrases.replace("ç","c")
   if (phrases.indexOf("ÿ",0) < 0 && phrases.indexOf("ç",0) < 0) break;
  }   
 len = phrases.length; // Initie la bonne valeur de la longeur ,parce que l'on a enlevé les espaces les points, ...
 var num_comparer; 
 var lettre_comparer;
 var résultat = "correct"
 var position = new Array(); // Fait un un table qui contient tous les caractères du mot ou de la phrase
 for (i=0;i<len;i++)
  {
   position[i] = phrases.charAt(i)
  }
 for (i=len;i>0;i--)
  {
   num_comparer = len - i
   lettre_comparer = position[num_comparer]
   if (lettre_comparer != phrases.charAt(i-1)) // Compare chaque caractères à sa lettre symétrique ( de l'autre côté )
    {
      résultat = "mauvais" // Si elle n'est pas égale elle retourne que ce n'est pas un pallindrome
    }
   }
 if (résultat == "correct") // Si à  aucun endroit les lettres n'on pas été égale il affiche que vous avez trouvé un palidrome.
  {
   alert("Vous avez réussi.\nC'était un palyndrome.")
  }
  else //Sinon que vous n'avez pas trouvé un palindrome
   {
    alert("Meilleur chance la prochaine fois.\nCe n'était pas un palyndrome.") 
   }
}
</SCRIPT>
</HEAD>
<BODY>
<FORM  name="form">
Votre phrase : <INPUT type="text" name="phrase" value="La marié ira mal.">
<INPUT type="button" value="Vérifié" onclick="vérifiéPhrase(document.form.phrase.value)">
<INPUT type="hidden" name="temp">
</FORM>
</BODY>
</HTML>

Conclusion :


J'ai essayer d'optimiser le code le plus possible et de la rendre plus souple (pour les espaces et autre). Si vous avez des suggestions n'hésitez à me les envoyer.

A voir également

Ajouter un commentaire Commentaires
cs_tecman Messages postés 63 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 juin 2005
7 mai 2005 à 00:13
Autre possibilité : mettre la phrase traitée (retrait accent, ...) dans un tableau et utiliser la fonction reverse().
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
14 mars 2005 à 00:57
Bon pour ceux qui ne savent pas ce que c'est un palindrome. En gros, c'est une phrase qui peut se lire de gauche à droite et de droite à gauche sans que la phrase change.

Ex: La marié ira mal
Si on la lit à l'envers on lira quand même la marié ira mal.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
13 mars 2005 à 10:05
a mon avis, t'as trop utilisé le copier coller...
pour tes remplacements de caractères, une boucle serait plus lisible...
cs_Romain128 Messages postés 89 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 7 novembre 2005
13 mars 2005 à 01:31
C'est quoi un palindrome ?
C'est une phrase sans caracteres speciaux?
Sinon c'est simple ton script, simple et bien, sans plus.
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
12 mars 2005 à 18:12
Elu par cette crapule :)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.