J'essaye de crypter et de décrypter des nombres entiers entre 0 et 9 en modifiant leur valeur avec un décalage de 3 : par exemple 1 donnerait 4, 3 donnerait 6, vous voyez l'idée.
J'ai un code qui fonctionne :
// Ce bout de code récupère un char (str), le convertit en // int et exécute le 'chiffrement'
while (str[k] != '\0') {
int nombre;
if (str[k] >= '0' && str[k]<= '9') {
nombre = atoi(str);
nombre = nombre + 3;
if(nombre==10){nombre=0;}
if(nombre==11){nombre=1;}
if(nombre==12){nombre=2;}
printf("\nnombre : %d",nombre);
str[k] = nombre + '0';
}
k++;
}
// Ce bout de code décrypte
while (str[k] != '\0') {
int nombre;
if (str[k] >= '0' && str[k]<= '9') {
nombre = atoi(str);
nombre = nombre - 3;
if(nombre==-1){nombre=9;}
if(nombre==-2){nombre=8;}
if(nombre==-3){nombre=7;}
printf("\nnombre : %d",nombre);
str[k] = nombre + '0';
}
k++;
}
Le problème c'est que ça marche que pour les entiers entre 0 et 9, pas au-delà. J'aimerais par exemple chiffrer 12 en 45 (1+3,2+3), comment dois-je procéder ?
Bonjour ! Pour chiffrer de même un nombre ayant plusieurs chiffres, il suffit de saisir une chaîne de caractères et d'appliquer l'algorithme caractère par caractère (on peut tout à fait ajouter +3 à un caractère ; si c'est un chiffre, ça donnera bien le chiffre +3 attendu (*)). À la fin, pour transformer la chaîne en entier, on peut utiliser sscanf.
----
(*) Par contre, en agissant sur les caractères, on ne pourra plus utiliser le modulo.
Le problème, c'est que ça ne prend pas en compte les différents entiers : par exemple, si j'entres 10, je veux avoir comme résultat 43 (1+3,0+3), 10 c'est en fait deux nombres : 1 et 0.
Une boucle parcourt la chaîne : '1' est transformé en '4', '0' est transformé en '3' (et '\0' provoque la fin du parcours). (C'était aussi l'idée de thetui.)
Après la boucle, on transforme la chaîne en entier avec 'sscanf' : "43" devient 43. C'est bien ça, le but ?
C'est effectivement ce que je recherche robun, je n'avais songer à le faire comme ça.
Ben 89 ça donnera 12 (8+3,9+2), à la seconde où un entier est supérieur à 9, il revient vers 0, ainsi 89 donnera 12, comme 193 donnera 426 (1+3,9+3,3+3).
EDIT : je n'y arrives toujours pas : j'essayes de cibler des éléments de la chaîne de caractères mais j'en arrives toujours à des résultats erronés.
- Edité par ReunanBeauvois 16 septembre 2020 à 14:22:15
C'est pour les différentes formes de scanf (pour les différents types de variables : %d pour int, %f pour les floats, %c pour les char, %s pour les strings, %u pour les unsigned), je ne les connais pas toutes.
Connaître à 100% tout un langage de programmation est impossible, à moins de ne faire que ça 24h/7j mais je doute que ce soit à la portée du commun des mortels (ça ne l'est pas en ce qui me concerne).
Crypter des entiers
× 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.
Chez moi ça sa marche.
git is great because Linus did it, mercurial is better because he didn't.