forked from elgoub/Encrypt-string-decalage
-
Notifications
You must be signed in to change notification settings - Fork 0
/
chiffreDecalage.cpp
64 lines (48 loc) · 1.49 KB
/
chiffreDecalage.cpp
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
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
#include <cctype>
#include <iterator>
using namespace std;
// Foncteur qui effectue un chiffrement par decalage
class ChiffrementDecal {
public:
// Constructeur prenant le decalage voulu en argument
ChiffrementDecal(int decalage) {
m_decalage = (decalage % 26);
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ";
}
char operator()(char c) {
if (isalpha(c) && isupper(c)) {
string::iterator it2 = find(alphabet.begin(), alphabet.end(), c);
return *(it2 + m_decalage);
} else {
return c;
}
}
private:
int m_decalage; // Le decalage a appliquer au texte
string alphabet;
};
int main() {
// flux pour afficher le resultat
ostream_iterator<char> itOut(cout, ", ");
// Le message a crypter
string texte("BIENVENUE SUR LE MOOC C++ D'OCR !!");
// Demande du decalage a l'utilisateur
cout << "Quel decalage voulez-vous utiliser ? ";
int decalage;
cin >> decalage;
// Creation du foncteur
ChiffrementDecal foncteur(decalage);
// Chaine de caracteres pour le message crypte
string texte_crypte;
texte_crypte.resize(texte.size());
transform(texte.begin(), texte.end(), texte_crypte.begin(), foncteur);
cout << texte_crypte << endl;
for (string::iterator it = texte_crypte.begin(); it != texte_crypte.end(); ++it) {
*itOut = *it;
}
return 0;
}