Partage
  • Partager sur Facebook
  • Partager sur Twitter

Décalage d'une lettre

    12 février 2012 à 10:49:51

    Bonjour,
    Je souhaite décaler une lettre avec un décalage qui peut etre positif ou négatif.
    Exemple : a de décalage -1 -> z
    a de cécalage +1 -> b

    Or, la formule que j'ai trouvé marche pour les décalages positifs mais pas pour les négatifs.
    Voici la formule : (char) (((c - 'a' + decalage) % 26) + 'a')
    c étant le caractère a décalé.
    Auriez vous une solution ?
    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      12 février 2012 à 11:04:06

      Je ne partirais pas sur les caracteres ASCII pour ma part.

      Je ferais un tableau de 26 elements avec l'alphabet, ensuite je test le nombre qui va decaler si son addition avec le caractère a decaler est positif tout va bien si il est negatif on l'additionne a 26 et c'est bon :)

      Compris? :)
      • Partager sur Facebook
      • Partager sur Twitter
        12 février 2012 à 11:08:11

        Ouais j'ai bien compris ce que tu veux dire, mais en fait, on nous a imposé de le faire avec la table ASCII :S
        • Partager sur Facebook
        • Partager sur Twitter
          12 février 2012 à 11:10:14

          Dans ce cas au lieu de demander si c'est negatif quand on fait le caractere en question plus le decalage tu fais < a la valeur ASCII de a, ca revient au meme
          • Partager sur Facebook
          • Partager sur Twitter
            12 février 2012 à 11:20:55

            Ca n'a pas l'air de marcher pour toutes les lettres le + 26 :
            (char) ((('a' - 'a' - 1) % 26) + 'a' + 26)
            z (char)
            (char) ((('b' - 'a' - 1) % 26) + 'a' + 26)
            { (char)
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              12 février 2012 à 11:23:23

              la valeur ascii de A est 65 pour les majuscule et 92(à vérifier) pour les minuscule, suffit de faire char++ puis si char > 92+26, char = 92, idem pour char--
              • Partager sur Facebook
              • Partager sur Twitter
                12 février 2012 à 11:25:18

                Oui mais j'ai mis 1 et -1 par hasard, sa peut tre +4, -20...
                • Partager sur Facebook
                • Partager sur Twitter
                  12 février 2012 à 11:26:56

                  Ne fais pas -a c'est la ton probleme vu que tu perd la nature de la table ASCII. Pour le negatif fais ce que je t'ai dit plus haut
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    12 février 2012 à 11:29:05

                    ++:
                    char value = value < 92+26 ? value++ : 92;
                    --:
                    char value = value > 92 ? value-- : 92+26;
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 février 2012 à 11:32:44

                      Ta solution shakal n'est pas du tout optimal. C'est comme si j'additionne 1 avec deux milions en faisant plus un a chaque fois. Il y a des manieres plus propres et rapides
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        12 février 2012 à 11:36:50

                        Citation : holosmos

                        Ta solution shakal n'est pas du tout optimal. C'est comme si j'additionne 1 avec deux milions en faisant plus un a chaque fois. Il y a des manieres plus propres et rapides



                        mea culpa j'avais compris incremation de 1 uniquement mais l'idée reste la même, suffit d'adapter:

                        ++:
                        char current = current + value < 92+26 ? current + value : 92;
                        • Partager sur Facebook
                        • Partager sur Twitter
                          12 février 2012 à 12:04:57

                          holosmos, ta méthode marche que pour la lettre a, regarde :
                          (char) ((('a' - 'a' - 1) % 26) + 'a' + 26)
                          z (char)
                          (char) ((('b' - 'a' - 1) % 26) + 'a' + 26)
                          { (char)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            12 février 2012 à 12:23:02

                            (char) ((('a' - 'a' - 1) % 26) + 'a' + 26)

                            ta fonction est tres compliqué je trouve, fait quelque chose de plus simple

                            val = 'a' + décalage

                            if val > 'z'
                            ...
                            else if val <'a'
                            ...

                            ça marche pas ça?
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Décalage d'une lettre

                            × 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