TheAlgorithms/C++ 1.0.0
All the algorithms implemented in C++
Loading...
Searching...
No Matches
morse_code.cpp
Go to the documentation of this file.
1
14#include <cassert>
15#include <iostream>
16#include <string>
17#include <vector>
18
22namespace ciphers {
27namespace morse {
33std::string char_to_morse(const char &c) {
34 // return corresponding morse code
35 switch (c) {
36 case 'a':
37 return ".-";
38 case 'b':
39 return "-...";
40 case 'c':
41 return "-.-.";
42 case 'd':
43 return "-..";
44 case 'e':
45 return ".";
46 case 'f':
47 return "..-.";
48 case 'g':
49 return "--.";
50 case 'h':
51 return "....";
52 case 'i':
53 return "..";
54 case 'j':
55 return ".---";
56 case 'k':
57 return "-.-";
58 case 'l':
59 return ".-..";
60 case 'm':
61 return "--";
62 case 'n':
63 return "-.";
64 case 'o':
65 return "---";
66 case 'p':
67 return ".--.";
68 case 'q':
69 return "--.-";
70 case 'r':
71 return ".-.";
72 case 's':
73 return "...";
74 case 't':
75 return "-";
76 case 'u':
77 return "..-";
78 case 'v':
79 return "...-";
80 case 'w':
81 return ".--";
82 case 'x':
83 return "-..-";
84 case 'y':
85 return "-.--";
86 case 'z':
87 return "--..";
88 case '1':
89 return ".----";
90 case '2':
91 return "..---";
92 case '3':
93 return "...--";
94 case '4':
95 return "....-";
96 case '5':
97 return ".....";
98 case '6':
99 return "-....";
100 case '7':
101 return "--...";
102 case '8':
103 return "---..";
104 case '9':
105 return "----.";
106 case '0':
107 return "-----";
108 default:
109 std::cerr << "Found invalid character: " << c << ' ' << std::endl;
110 std::exit(0);
111 }
112}
118char morse_to_char(const std::string &s) {
119 // return corresponding character
120 if (s == ".-") {
121 return 'a';
122 } else if (s == "-...") {
123 return 'b';
124 } else if (s == "-.-.") {
125 return 'c';
126 } else if (s == "-..") {
127 return 'd';
128 } else if (s == ".") {
129 return 'e';
130 } else if (s == "..-.") {
131 return 'f';
132 } else if (s == "--.") {
133 return 'g';
134 } else if (s == "....") {
135 return 'h';
136 } else if (s == "..") {
137 return 'i';
138 } else if (s == ".---") {
139 return 'j';
140 } else if (s == "-.-") {
141 return 'k';
142 } else if (s == ".-..") {
143 return 'l';
144 } else if (s == "--") {
145 return 'm';
146 } else if (s == "-.") {
147 return 'n';
148 } else if (s == "---") {
149 return 'o';
150 } else if (s == ".--.") {
151 return 'p';
152 } else if (s == "--.-") {
153 return 'q';
154 } else if (s == ".-.") {
155 return 'r';
156 } else if (s == "...") {
157 return 's';
158 } else if (s == "-") {
159 return 't';
160 } else if (s == "..-") {
161 return 'u';
162 } else if (s == "...-") {
163 return 'v';
164 } else if (s == ".--") {
165 return 'w';
166 } else if (s == "-..-") {
167 return 'x';
168 } else if (s == "-.--") {
169 return 'y';
170 } else if (s == "--..") {
171 return 'z';
172 } else if (s == ".----") {
173 return '1';
174 } else if (s == "..---") {
175 return '2';
176 } else if (s == "...--") {
177 return '3';
178 } else if (s == "....-") {
179 return '4';
180 } else if (s == ".....") {
181 return '5';
182 } else if (s == "-....") {
183 return '6';
184 } else if (s == "--...") {
185 return '7';
186 } else if (s == "---..") {
187 return '8';
188 } else if (s == "----.") {
189 return '9';
190 } else if (s == "-----") {
191 return '0';
192 } else {
193 std::cerr << "Found invalid Morse code: " << s << ' ' << std::endl;
194 std::exit(0);
195 }
196}
202std::string encrypt(const std::string &text) {
203 std::string encrypted_text = ""; // Empty string to store encrypted text
204 // Going through each character of text and converting it
205 // to morse representation
206 for (const char &c : text) {
207 encrypted_text += ciphers::morse::char_to_morse(c) + " ";
208 }
209 return encrypted_text; // Returning encrypted text
210}
216std::string decrypt(const std::string &text) {
217 // Going through each character of text and converting it
218 // back to normal representation.
219 std::string decrypted_text = ""; // Empty string to store decrypted text
220 // Spliting string (with delimiter = " ") and storing it
221 // in vector
222 std::size_t pos_start = 0, pos_end = 0, delim_len = 1;
223 std::vector<std::string> splits;
224 while ((pos_end = text.find(' ', pos_start)) != std::string::npos) {
225 std::string token = text.substr(pos_start, pos_end - pos_start);
226 pos_start = pos_end + delim_len;
227 splits.push_back(token);
228 }
229
230 // Traversing through each morse code string
231 for (const std::string &s : splits) {
232 // Add corresponding character
233 decrypted_text += ciphers::morse::morse_to_char(s);
234 }
235
236 return decrypted_text; // Returning decrypted text
237}
238} // namespace morse
239} // namespace ciphers
240
245static void test() {
246 // Test 1
247 std::string text1 = "01234567890";
248 std::string encrypted1 = ciphers::morse::encrypt(text1);
249 std::string decrypted1 = ciphers::morse::decrypt(encrypted1);
250 assert(text1 == decrypted1);
251 std::cout << "Original text : " << text1 << std::endl;
252 std::cout << "Encrypted text : " << encrypted1 << std::endl;
253 std::cout << "Decrypted text : " << decrypted1 << std::endl;
254 // Test 2
255 std::string text2 = "abcdefghijklmnopqrstuvwxyz";
256 std::string encrypted2 = ciphers::morse::encrypt(text2);
257 std::string decrypted2 = ciphers::morse::decrypt(encrypted2);
258 assert(text2 == decrypted2);
259 std::cout << "Original text : " << text2 << std::endl;
260 std::cout << "Encrypted text : " << encrypted2 << std::endl;
261 std::cout << "Decrypted text : " << decrypted2 << std::endl;
262}
263
268int main() {
269 // Testing
270 test();
271 return 0;
272}
static void test()
Function to test above algorithm.
std::string char_to_morse(const char &c)
char morse_to_char(const std::string &s)
int main()
Main function.
Algorithms for encryption and decryption.
Functions for [Morse Code] (https://en.wikipedia.org/wiki/Morse_code).