TheAlgorithms/C++ 1.0.0
All the algorithms implemented in C++
Loading...
Searching...
No Matches
a1z26_cipher.cpp
Go to the documentation of this file.
1
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
25namespace ciphers {
31namespace a1z26 {
32
33std::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
40std::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
51std::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
78std::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
120static 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
159int main() {
160 test(); // run self-test implementations
161 return 0;
162}
std::string decrypt(const std::string &text, bool bReturnUppercase=false)
a1z26 decryption implementation
std::string encrypt(std::string text)
a1z26 encryption implementation
static void test()
Self-test implementations.
int main()
Main function.
Functions for A1Z26 encryption and decryption implementation.
Algorithms for encryption and decryption.