CRYPTER-DECRYPTER EN UTILISANT L'ALGORITHME DE CESAR

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 30 déc. 2009 à 00:27
 Utilisateur anonyme - 5 janv. 2010 à 14:21
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51032-crypter-decrypter-en-utilisant-l-algorithme-de-cesar

Utilisateur anonyme
5 janv. 2010 à 14:21
Okey, merci, j'avais pas compris le
// tu traites ici
dans ton code ^^
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 janv. 2010 à 14:02
Il n'y a plus notion d'itérateur "texte[i]" puisqu'on déplace le pointeur.

Un truc dans ce genre:
void cesar_crypt(int decallage, char *texte)
{
char c;
int decMin = decallage - 'a';
decallage -= 'A';
while(c = *texte) {
if(c > 'z') goto nextCHR;
if(c < 'A') goto nextCHR;
if(c <= 'Z') goto goMAJ;
if(c < 'a') goto nextCHR;
c = 'a' + (c + decMin) % 26;
goto goREPLACE;
goMAJ:
c = 'A' + (c + decallage) % 26;
goREPLACE: *texte = c;
nextCHR: texte++;
}
}
Utilisateur anonyme
5 janv. 2010 à 11:06
Si j'ai bien compris, je dois remplacer
for(i=0 ; i<strlen(texte) ; i++)

par

char i;
while(i = *texte) {

puis mettre

if ('a' <= texte[i] && texte[i] <= 'z')
texte[i] = 'a' + ((texte[i] - 'a') + decallage)%26;
else

if ('A' <= texte[i] && texte[i] <= 'Z')
texte[i] = 'A' + ((texte[i] - 'A') + decallage)%26;
else
{
}
et après

texte++;
}

C'est sa ?
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 déc. 2009 à 14:07
OUPS a la relecture:
char a;
while(a = *texte) {
// TU TRAITES ICI
texte++;
}

et non pas *texte++ comme dit dans comment précédent.
Utilisateur anonyme
30 déc. 2009 à 13:11
Merci de vos commentaires ;)

@ghuysmans99 : J'ai essayé de mettre un switch, mais je ne pouvais compiler (erreur de type : "" non-declaré)
@brunew : Je vais corriger avec ce que tu me dis, merci ;)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 déc. 2009 à 09:46
C'est dans l'autre sens, un indicateur vaut 0 pour FAUX ou nimporte quoi d'autre sera VRAI.

Comme pour toutes les "Cesaritudes" qu'on a sur cppfrance et qui proposent les mêmes défauts de débutants:
for(i=0 ; i<strlen(texte) ; i++)
NON et NON, tu ne modifies pas la longueur, il est donc improductif de la recalculer à chaque tour. On peut ajouter qu'il est totalement inutile de parcourir la chaine 2 fois:
char a;
while(a = *texte) {
// TU TRAITES ICI
*texte++;
}
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
30 déc. 2009 à 00:27
La série des "if (menu == X)" peut être remplacée par un switch.
"else if (crypter == 0) " n'a aucun sens : si crypter est booléen et qu'il ne vaut pas 1, il vaut 0 !
Rejoignez-nous