Partage
  • Partager sur Facebook
  • Partager sur Twitter

Inverser l'ordre d'une chaîne de caractère

Sujet résolu
    24 mai 2022 à 18:42:50

    Bonjour,

    Je réalise des exercices en javascript pour m'améliorer sur ce langage et je bute face à un problème. La plateforme sur laquelle je me trouve me propose l'exercice suivant:

    "écrire une fonction qui, pour une chaîne de caractère, retourne celle-ci en changeant le sens des mots dont la longueur est supérieure ou égale à 5 caractères."

    L'énoncé rajoute que la chaîne de caractère ne peut avoir que des lettres, des chiffres ou des espaces. Les espaces ne doivent apparaitre que si il y a plus d'un mot dans la valeur de retour.

    Un exemple : "Bonjour à tous les copains et tous les amis" renvoie "ruojnoB à tous les sniapoc et tous les amis".

    Voici la solution que j'ai imaginé:

    function spinWords(string) {
      const arrayOfString = string.split(' ');
      const wordsReversed = arrayOfString.map(word => {if (word.length > 4) {
        return word.split('').reverse().join('');
      } else {
        return word;
      }});
      return wordsReversed.join(' ');
    };

    Dans ma fonction spinWords, je recommence par récupérer la chaîne de caractère donnée en paramètre. Je crée ensuite un tableau qui contiendra chaque éléments de ma chaîne séparés par un espace. J'obtiens donc un tableau contenant tous les mots de ma chaîne intiale.

    Ensuite, j'agis différemment selon chaque mot. S'il a 5 caractères de longueur ou plus, je le transforme lui-même en un tableau contenant la liste de toutes ses lettres, change l'ordre de ses lettres, puis retransforme ce tableau en chaîne de caractère. Si le mot a moins de 5 chiffres, par contre, je le laisse tel quel.

    Enfin, je récupère mon tableau de tous les mots avec certains inversés et d'autres non, et je le retransforme en chaîne de caractère en remettant un espace entre chaque mot.

    Lorsque je teste cette fonction sur plusieurs chaînes de caractère que j'imagine, ma fonction fonctionne et renvoie la valeur que j'attend. Pourtant, la plateforme qui me propose cet exercice ne valide pas ma réponse et me dit qu'il y a une erreur sans m'expliquer laquelle. J'ai probablement oublié de gérer une éventualité dans ma fonction, mais je ne parviens pas du tout à savoir laquelle. Et je ne peux pas tester ma fonction sur une infinité de chaînes de caractère non plus, simplement en attendant d'en inventer une où ma fonction ne fonctionnera pas, juste pour pouvoir comprendre où peut possiblement se trouver mon erreur.

    Auriez-vous une idée ?

    Merci d'avance !

    • Partager sur Facebook
    • Partager sur Twitter
      25 mai 2022 à 10:03:24

      « L'énoncé rajoute que la chaîne de caractère ne peut avoir que des lettres, des chiffres ou des espaces »

      Bonjour. C'est peut-être ceci que tu n'as pas traité. Ça demande une expression régulière. Cordialement.

      • Partager sur Facebook
      • Partager sur Twitter
        25 mai 2022 à 13:37:38

        Salut,

        Je ne suis pas certain que ça soit le problème Domi65, moi je comprends dans l'énoncer que c'est la chaîne d'entrée qui ne contiendra que des lettres, chiffres ou espaces. Pas que celle de sortie doit contenir uniquement des lettres, chiffres ou espaces.

        Mais je peux me tromper dans mon interprétation.

        Moi je vois surtout qu'il manque cette partie de l'énoncé :

        NathanaëlMarie-Louise a écrit:

        Les espaces ne doivent apparaitre que si il y a plus d'un mot dans la valeur de retour.


        Tu peux tenté un trim si c'est ce qui est entendu par là. Si c'est pas ça, tu vas avoir besoin d'un peu plus de logique if/else pour respecter ça.

        Par exemple "Test " devrait donner comme résultat "Test". Et si cette partie de l'énoncer est plus strict qu'un simple appel à trim, "Test test " devrait donnée comme résultat "Test test " (avec les deux espaces cette fois).

        • Partager sur Facebook
        • Partager sur Twitter

        Inverser l'ordre d'une chaîne de caractère

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown