Bonjour à tous,
Alors voilà je suis grand débutant en C++ et je viens de créer un petit programme refaisant le chiffrement de César.
Ce chiffrement, qui est tout ce qu'il y a de plus basique, consiste à décaler les lettres de toute une phrase selon leur emplacement dans l'alphabet...
Ainsi je voudrais savoir de la part de programmeurs plus expérimentés que moi, si ma "façon de coder" est bonne et si je ne prends pas de mauvaises habitudes... (j'ai essayé de faire des efforts en ce qui concerne l'indentation et les remarques... )
Et puis une petite question, ça ne fait pas trop barbare mon if (à la ligne 79) avec tous les caractères spéciaux??
Voici le code :
Sinon le code est aussi dispo ici.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95 #include <cstdio> #include <cstdlib> #include <iostream> #include <string> #define CHAINE_MAXI 1000 using namespace std; // définition de l'alphabet : const string Alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; string chaineEntree=""; // définition de la phrase d'entrée (celle que l'utilisateur entre...) char chaineSortie[CHAINE_MAXI]=""; // définition de la phrase de sortie (celle que l'algo resort...) int decalage=0; // définition de la variable de décalage int varAnnuleDecalage=0; // création d'une variable en cas de dépassement de l'alphabet et qui permet un retour au début de l'alphabet void toutMajuscule(); // fonction pour mettre la chaine de l'utilisateur en majuscule void cryptage(); // fonction de décalage de toutes les lettres de la chaine int main(int nNumberOfArgs, char* pszArgs[]) { int continuer=0; do { system("clear"); // on efface l'écran (ATTENTION : "clear" sous Linux et "cls" sous DOS/Windows) cout << "\t/====================================\\" << endl; cout << "\t| Le chiffrement de César (par nK0) |" << endl; cout << "\t\\====================================/" << endl << endl; // une 'tite présentation :) chaineEntree=""; // on efface... for(int i=0;i<CHAINE_MAXI;i++) chaineSortie[i]=0; // idem pour chaineSortie... cout << "Entrez la phrase à coder : "; getline(std::cin, chaineEntree); // l'utilisateur entre sa phrase (il peut mettre des espaces...) cout << "Entrez le décalage (compris entre 0 et 26) : "; cin >> decalage; // il entre le décalage voulu cout << endl; toutMajuscule(); // et on met sa chaine en majuscules... if(decalage>=0 && decalage<=26) { cout << "Avec un décalage de " << decalage << " lettres, " << chaineEntree << " donne :" << endl; cryptage(); // et on crypte... cout << "\n\t"<< chaineSortie << endl << endl; } else cout << "Erreur : Entrez un décalage compris entre 0 et 26" << endl << endl; cout << "Voulez-vous recommencer ? (1=oui, 0=non) "; // on demande à l'utilisateur s'il veut recommencer un nouveau codage cin >> continuer; while(getchar() != '\n'); cout << endl; } while (continuer==1); // boucle pour recommencer l'opération return 0; } // fonction pour mettre la chaine de l'utilisateur en majuscule : void toutMajuscule() { for(int i=0;i<CHAINE_MAXI;i++) { if(chaineEntree[i]) { chaineEntree[i]=toupper(chaineEntree[i]); // on met tous les caractère de la chaine en MAJUSCULES } // et maintenant on s'occupe des caractère spéciaux du français if (chaineEntree[i] && chaineEntree[i]=='é') chaineEntree[i]='E'; if (chaineEntree[i] && chaineEntree[i]=='ç') chaineEntree[i]='C'; if (chaineEntree[i] && chaineEntree[i]=='à') chaineEntree[i]='A'; if (chaineEntree[i] && chaineEntree[i]=='ù') chaineEntree[i]='U'; if (chaineEntree[i] && chaineEntree[i]=='ë') chaineEntree[i]='E'; if (chaineEntree[i] && chaineEntree[i]=='ô') chaineEntree[i]='O'; if (!chaineEntree[i]) break; } } // fonction de décalage de toutes les lettres de la chaine : void cryptage() { for (int i=0;i<CHAINE_MAXI;i++) { if (chaineEntree[i]=='\0') break; for (int j=0;j<26;j++) { if (chaineEntree[i]==',' || chaineEntree[i]=='\'' || chaineEntree[i]=='_' || chaineEntree[i]=='/' || chaineEntree[i]=='\\' || chaineEntree[i]=='0' || chaineEntree[i]=='1' || chaineEntree[i]=='2' || chaineEntree[i]=='3' || chaineEntree[i]=='4' || chaineEntree[i]=='5' || chaineEntree[i]=='6' || chaineEntree[i]=='7' || chaineEntree[i]=='8' || chaineEntree[i]=='9' || chaineEntree[i]=='-' || chaineEntree[i]=='*' || chaineEntree[i]==' ' || chaineEntree[i]=='+' || chaineEntree[i]=='(' || chaineEntree[i]==')' || chaineEntree[i]=='"' || chaineEntree[i]=='&' || chaineEntree[i]=='@' || chaineEntree[i]=='$' || chaineEntree[i]=='.' || chaineEntree[i]=='!' || chaineEntree[i]==':' || chaineEntree[i]==';' || chaineEntree[i]=='?' || chaineEntree[i]=='%' || chaineEntree[i]=='^' || chaineEntree[i]=='"' || chaineEntree[i]=='£' || chaineEntree[i]=='¤') // liste de tous les caractère à ne pas coder { chaineSortie[i]=chaineEntree[i]; break; } else if (chaineEntree[i]==Alphabet[j] && j+decalage<26) { chaineSortie[i]=chaineEntree[i]+decalage; // on décale normalement si j+decalage<=25 } else if (chaineEntree[i]==Alphabet[j] && j+decalage>=26) { varAnnuleDecalage=25-j; // un peu plus spécial si le décalage sort de l'alphabet chaineSortie[i]=Alphabet[decalage-varAnnuleDecalage-1]; // on retourne donc au début de l'alphabet en enlevant les lettres passées à la fin de l'alphabet } } } }
Voilà, merci d'avance pour vos observations...
Partager