[Visual Basic] Mélanger l'ordre des lettres d'un mot
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

[Visual Basic] Mélanger l'ordre des lettres d'un mot



  1. #1
    invitea026b3eb

    [Visual Basic] Mélanger l'ordre des lettres d'un mot


    ------

    Salut à tous, je bosse depuis 2h sur une foutue fonction pour mélanger les lettres d'un mot (String) et je suis bloqué !

    Bon voilà comment j'ai pensé faire :

    -Convertir le String passé en paramètre en un tableau de char
    -Dupliquer le tableau de char en un deuxième tableau de char afin de pouvoir en remplir un se basant sur l'autre.
    -Faire une boucle for qui génère un nombre au hasard en 0 et la taille du tableau initial
    -Remplir le deuxième tableau en lui donnant des lettres du premiers tableau tirées aléatoirement
    -Mettre ce deuxième tableau dans un String puis retourner le String en question

    Problème :
    -Je n'arrive pas à supprimer un élément du tableau charArray à chaque tour de boucle afin de ne pas pouvoir tirer deux fois une même lettre au hasard :/

    Exemple de résultat que je voudrais : "salut" => "alstu"

    Voilà un peu où j'en suis :

    Code:
    Private Function melanger(ByVal s As String) As String
            Dim charArray() As Char = s.ToCharArray    
            Dim charArray2() As Char = charArray
            Dim value As Integer
            For i As Integer = 0 To charArray.Length - 1
                Randomize()
                value = CInt(Int((charArray.Length * Rnd()) + 0))
                charArray2(i) = charArray(value)
            Next
            Dim newS As String = charArray2
            Return newS
    Une idée ?? Merci

    -----
    Dernière modification par Jack ; 13/03/2014 à 12h26. Motif: remplacement balises quote par balises code

  2. #2
    Jack
    Modérateur

    Re : [Visual Basic] Mélanger l'ordre des lettres d'un mot

    Les balises "code" permettent de conserver l'indentation contrairement aux balises quote (citation)

  3. #3
    Jack
    Modérateur

    Re : [Visual Basic] Mélanger l'ordre des lettres d'un mot

    Je ne connais pas visual basic, mais je viens de jeter un oeil sur les fonctions de string.
    Il me semble qu'il n'est pas nécessaire de passer par un tableau: pourquoi ne pas tirer au hasard le numéro d'un caractère dans la chaine de départ, stocker ce caractère dans la chaine que tu veux obtenir, supprimer le caractère de la chaine de départ et continuer ainsi jusqu'à ce que la chaine de départ soit vide?

    A+

  4. #4
    invitea026b3eb

    Re : [Visual Basic] Mélanger l'ordre des lettres d'un mot

    En gros tu me demandes de manipuler les caractères du String directement ? Je savais même pas que c'était possible

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : [Visual Basic] Mélanger l'ordre des lettres d'un mot


  7. #6
    Optimix

    Re : [Visual Basic] Mélanger l'ordre des lettres d'un mot

    Sans vouloir vous blesser, il n'existe pas de "foutue fonction" en algorithmie. Il existe des fonctions simples, des fonctions complexes et des fonctions tellement complexes qu'on ne peut plus vraiment parler de fonctions, mais de systèmes.
    Je comprends les difficultés rencontrées à la seule lecture de la question posée. Question à laquelle je n'ai pas tout compris alors que j'avais probablement l'ensemble du besoin dans le titre. Une fois de plus, c'est Boileau qui s'en sort le mieux : "Ce qui se conçoit bien...bla...bla...bla...".
    Vous êtes dans le domaine des anagrammes sans doublon (à confirmer). VB s'en sort très bien dans la gestion des String (mieux que moi dans l'observation des maillots de bain de mes petites filles).
    S'il s'agit d'anagrammes sans doublons sous VB, la solution est assez facile avec les tableaux dynamiques. A vous de préciser.
    PS : la proposition d'un code me semblera toujours prématurée, quelque soit le langage de programmation, si l'algorithme, en langage humain, présente des failles.

  8. #7
    invitea026b3eb

    Re : [Visual Basic] Mélanger l'ordre des lettres d'un mot

    J'ai fini par trouver, il suffisait juste d'intervertir les cases du tableau de 0 à MAX avec un case aléatoire. Au cas où ça intéresserait quelqu'un :

    Code:
     Private Function melanger(ByVal s As String) As String
            Dim charArray() As Char = s.ToCharArray
            Dim Temp As Char
            Dim value As Integer
            Randomize()
            For i As Integer = 0 To charArray.Length - 1
                value = CInt(Int((charArray.Length * Rnd()) + 0))
                Temp = charArray(value)
                charArray(value) = charArray(i)
                charArray(i) = Temp
            Next
            Dim newS As String = charArray
            Return newS
        End Function

Discussions similaires

  1. Problème de réception port série visual basic ( visual studio 2012)
    Par invite105cee1c dans le forum Programmation et langages, Algorithmique
    Réponses: 9
    Dernier message: 30/07/2013, 22h44
  2. visual basic
    Par invite096ed528 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 02/10/2009, 08h01
  3. Visual Basic
    Par invited280a227 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 17/09/2007, 12h45
  4. visual basic 6
    Par marc.suisse dans le forum Électronique
    Réponses: 6
    Dernier message: 17/05/2006, 08h56
  5. Visual Basic
    Par invite588da7a7 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 09/07/2004, 13h57