VERIFICATION D'UN PALINDROME

Signaler
Messages postés
14821
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 septembre 2021
-
Messages postés
107
Date d'inscription
samedi 25 novembre 2000
Statut
Membre
Dernière intervention
4 mai 2013
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53828-verification-d-un-palindrome

Messages postés
107
Date d'inscription
samedi 25 novembre 2000
Statut
Membre
Dernière intervention
4 mai 2013

Mais pourquoi s'embêter à passer par un tableau de caractères alors, qu'un string EST un tableau de caractère (tout du moins son implémentation)
De plus on peut se contenter de ne parcourir que la moitié de la chaine (vu qu'on l'analyse "par les deux bouts")

Function IsPalindrome(ByVal text As String) As Boolean
    For i As Integer = 0 To text.Length \ 2 - 1
        If text(i) <> text(text.Length - 1 - i) Then Return False
    Next
    Return True
End Function

Quitte à faire un overkill contreperformant, autant le faire élégamment ^^ (avec les méthodes d'extension)
Dim isPalindrome As Func(Of String, Boolean) = Function(text) text.SequenceEqual(text.Reverse)

Cordialement !
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
52
Salut
cela serait plutot un snippet
Private Function Palindrom(ByVal strin As String) As Boolean
Dim strcar As Char()
Dim iter As Integer
strcar = strin.ToCharArray
For iter = 0 To strcar.Count - 1
If strcar(iter) <> strcar(strcar.Count - 1 - iter) Then
Return False
End If
Next
Return True
End Function
Messages postés
15142
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
27 septembre 2021
99
Regarde les différentes méthodes postées sur Codyx: http://codyx.org/snippet_savoir-si-mot-est-palindrome_398.aspx
D'ailleurs, vu le nombre de solutions postées pour ce "problème", ta source n'a que peu d'intérêt, désolé.
Je la supprimerais donc dans l'après-midi.
Messages postés
15142
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
27 septembre 2021
99
Non.
Un palindrome est un mot, ou un texte plus généralement, dont l'ordre des lettres ne change pas suivant le sens de lecture. "kayak", "Esope reste ici et se repose": oui, ce sont des palindromes. "Abbaya": non, pas palindrome.Donc, la définition de Adn56 est tout à fait correcte. Je pense que tu n'as pas lu toute sa phrase ;) Je cite: "alors la première lettre la dernière, la seconde l'avant dernière, etc..."
Messages postés
355
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
15 juin 2019
10
salut Adn56, Sache que pour un palindrome si tu dis que la Première=dernière c'est faux exemple:Abbaya
est-ce un palindrome?
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Salut, encore une fois hormis l'inutilité la plus complète du code, il vous faut vraiment prendre en compte les conseils de NHenry (c'est codé en VB6), Faites aussi attention à la cohérence des noms de variables, un MotLong m'indique une string pas un Long ou integer ;)
Pour finir avec ce bout de code, je rebondi sur le message de Sehnsucht car il a bien raison.Inverser les lettres une à une pour les placer dans un autre string et voir si c'est égal et loin d'être le plus simple, regarde bien la définition de palindrome, une solution saute au yeux ! Si c'est un palindrome alors la première lettre la dernière, la seconde l'avant dernière, etc....tant que c'est égalité sont vrai alors c'est un palindrome, dés qu'une est fausse zou on sort de la boucle pour dire NON c'est pas un palindrome. Voili voilou.. kenavo
Messages postés
107
Date d'inscription
samedi 25 novembre 2000
Statut
Membre
Dernière intervention
4 mai 2013

Bonsoir,

Outre les remarques déjà énoncées, il faudrait aussi songer à revoir l'algorithme, créer un nouveau tableau de caractères pour le remplir de la chaîne à l'envers afin de comparer les 2 strings, c'est pas vraiment le plus simple ; une simple boucle peut suffire ;)

Cordialement !
Messages postés
14821
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 septembre 2021
156
Bonsoir,

Retires l'import de l'espace de nom Microsoft.VisualBasic (propriétés du projet) et utilises les méthodes fournies par le Framework.

Là tu as codé en VB6 dans .NET.

MsgBox -> Messagebox.Show
Mid -> MaChaine.SubString
etc.
Actives aussi (si ce n'est pas déjà fait) Option Strict et Option Explicit.

Long en VB6 équivaut à Integer en .NET.