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

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

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.