Sehnsucht
Messages postés107Date d'inscriptionsamedi 25 novembre 2000StatutMembreDernière intervention 4 mai 2013 6 déc. 2011 à 14:51
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 !
cs_ShayW
Messages postés3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 201957 6 déc. 2011 à 14:07
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
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 6 déc. 2011 à 11:44
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.
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 6 déc. 2011 à 11:38
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..."
DevLama
Messages postés356Date d'inscriptionmercredi 13 avril 2011StatutMembreDernière intervention18 novembre 202110 6 déc. 2011 à 11:19
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?
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 6 déc. 2011 à 08:19
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
Sehnsucht
Messages postés107Date d'inscriptionsamedi 25 novembre 2000StatutMembreDernière intervention 4 mai 2013 5 déc. 2011 à 21:05
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 !
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 5 déc. 2011 à 20:10
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.
6 déc. 2011 à 14:51
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 !
6 déc. 2011 à 14:07
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
6 déc. 2011 à 11:44
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.
6 déc. 2011 à 11:38
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..."
6 déc. 2011 à 11:19
est-ce un palindrome?
6 déc. 2011 à 08:19
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
5 déc. 2011 à 21:05
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 !
5 déc. 2011 à 20:10
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.