TheAlgorithms/C++
1.0.0
All the algorithms implemented in C++
Toggle main menu visibility
Loading...
Searching...
No Matches
a1z26_cipher.cpp
Go to the documentation of this file.
1
11
12
#include <algorithm>
13
#include <cassert>
14
#include <cstdint>
15
#include <iostream>
16
#include <map>
17
#include <sstream>
18
#include <string>
19
#include <vector>
20
25
namespace
ciphers
{
31
namespace
a1z26
{
32
33
std::map<uint8_t, char> a1z26_decrypt_map = {
34
{1,
'a'
}, {2,
'b'
}, {3,
'c'
}, {4,
'd'
}, {5,
'e'
}, {6,
'f'
}, {7,
'g'
},
35
{8,
'h'
}, {9,
'i'
}, {10,
'j'
}, {11,
'k'
}, {12,
'l'
}, {13,
'm'
}, {14,
'n'
},
36
{15,
'o'
}, {16,
'p'
}, {17,
'q'
}, {18,
'r'
}, {19,
's'
}, {20,
't'
}, {21,
'u'
},
37
{22,
'v'
}, {23,
'w'
}, {24,
'x'
}, {25,
'y'
}, {26,
'z'
},
38
};
39
40
std::map<char, uint8_t> a1z26_encrypt_map = {
41
{
'a'
, 1}, {
'b'
, 2}, {
'c'
, 3}, {
'd'
, 4}, {
'e'
, 5}, {
'f'
, 6}, {
'g'
, 7},
42
{
'h'
, 8}, {
'i'
, 9}, {
'j'
, 10}, {
'k'
, 11}, {
'l'
, 12}, {
'm'
, 13}, {
'n'
, 14},
43
{
'o'
, 15}, {
'p'
, 16}, {
'q'
, 17}, {
'r'
, 18}, {
's'
, 19}, {
't'
, 20}, {
'u'
, 21},
44
{
'v'
, 22}, {
'w'
, 23}, {
'x'
, 24}, {
'y'
, 25}, {
'z'
, 26}};
45
51
std::string
encrypt
(std::string text) {
52
std::string result;
53
std::transform(text.begin(), text.end(), text.begin(),
54
::tolower);
// convert string to lowercase
55
std::replace(text.begin(), text.end(),
':'
,
' '
);
56
for
(
char
letter : text) {
57
if
(letter !=
' '
) {
58
result += std::to_string(
59
a1z26_encrypt_map[letter]);
// convert int to string and append
60
// to result
61
result +=
"-"
;
// space out each set of numbers with spaces
62
}
else
{
63
result.pop_back();
64
result +=
' '
;
65
}
66
}
67
result.pop_back();
// remove leading dash
68
return
result;
69
}
70
78
std::string
decrypt
(
const
std::string& text,
bool
bReturnUppercase =
false
) {
79
std::string result;
80
81
// split words seperated by spaces into a vector array
82
std::vector<std::string> word_array;
83
std::stringstream sstream(text);
84
std::string word;
85
while
(sstream >> word) {
86
word_array.push_back(word);
87
}
88
89
for
(
auto
& i : word_array) {
90
std::replace(i.begin(), i.end(),
'-'
,
' '
);
91
std::vector<std::string> text_array;
92
93
std::stringstream ss(i);
94
std::string res_text;
95
while
(ss >> res_text) {
96
text_array.push_back(res_text);
97
}
98
99
for
(
auto
& i : text_array) {
100
result += a1z26_decrypt_map[stoi(i)];
101
}
102
103
result +=
' '
;
104
}
105
result.pop_back();
// remove any leading whitespace
106
107
if
(bReturnUppercase) {
108
std::transform(result.begin(), result.end(), result.begin(), ::toupper);
109
}
110
return
result;
111
}
112
113
}
// namespace a1z26
114
}
// namespace ciphers
115
120
static
void
test
() {
121
// 1st test
122
std::string input =
"Hello World"
;
123
std::string expected =
"8-5-12-12-15 23-15-18-12-4"
;
124
std::string output =
ciphers::a1z26::encrypt
(input);
125
126
std::cout <<
"Input: "
<< input << std::endl;
127
std::cout <<
"Expected: "
<< expected << std::endl;
128
std::cout <<
"Output: "
<< output << std::endl;
129
assert(output == expected);
130
std::cout <<
"TEST PASSED"
;
131
132
// 2nd test
133
input =
"12-15-23-5-18-3-1-19-5"
;
134
expected =
"lowercase"
;
135
output =
ciphers::a1z26::decrypt
(input);
136
137
std::cout <<
"Input: "
<< input << std::endl;
138
std::cout <<
"Expected: "
<< expected << std::endl;
139
std::cout <<
"Output: "
<< output << std::endl;
140
assert(output == expected);
141
std::cout <<
"TEST PASSED"
;
142
143
// 3rd test
144
input =
"21-16-16-5-18-3-1-19-5"
;
145
expected =
"UPPERCASE"
;
146
output =
ciphers::a1z26::decrypt
(input,
true
);
147
148
std::cout <<
"Input: "
<< input << std::endl;
149
std::cout <<
"Expected: "
<< expected << std::endl;
150
std::cout <<
"Output: "
<< output << std::endl;
151
assert(output == expected);
152
std::cout <<
"TEST PASSED"
;
153
}
154
159
int
main
() {
160
test
();
// run self-test implementations
161
return
0;
162
}
ciphers::a1z26::decrypt
std::string decrypt(const std::string &text, bool bReturnUppercase=false)
a1z26 decryption implementation
Definition
a1z26_cipher.cpp:78
ciphers::a1z26::encrypt
std::string encrypt(std::string text)
a1z26 encryption implementation
Definition
a1z26_cipher.cpp:51
test
void test()
Definition
caesar_cipher.cpp:100
main
int main()
Main function.
Definition
generate_parentheses.cpp:110
a1z26
Functions for A1Z26 encryption and decryption implementation.
ciphers
Algorithms for encryption and decryption.
ciphers
a1z26_cipher.cpp
Generated by
1.18.0