Advertisement
janac

Encode a string by substitution

Dec 9th, 2021 (edited)
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.39 KB | None | 0 0
  1. #include <iostream>  
  2. #include <string>
  3. #include <limits>
  4. using namespace std;
  5.  
  6. // Encode a character.
  7. char encode_char(char character)
  8. {
  9.     // The encoded charater to return.
  10.     char encoded_char = '@';
  11.  
  12.     // Based on the character,
  13.     switch (character)
  14.     {
  15.         // Replace with a different character.
  16.     case 'A': encoded_char = 'N'; break;
  17.     case 'B': encoded_char = 'U'; break;
  18.     case 'C': encoded_char = '4'; break;
  19.     case 'D': encoded_char = 'E'; break;
  20.     case 'E': encoded_char = 'M'; break;
  21.     case 'F': encoded_char = '3'; break;
  22.     case 'G': encoded_char = 'l'; break;
  23.     case 'H': encoded_char = 'L'; break;
  24.     case 'I': encoded_char = '!'; break;
  25.     case 'J': encoded_char = '2'; break;
  26.     case 'K': encoded_char = '?'; break;
  27.     case 'L': encoded_char = 'k'; break;
  28.     case 'M': encoded_char = '.'; break;
  29.     case 'N': encoded_char = '1'; break;
  30.     case 'O': encoded_char = 'A'; break;
  31.     case 'P': encoded_char = 'T'; break;
  32.     case 'Q': encoded_char = 'j'; break;
  33.     case 'R': encoded_char = ' '; break;
  34.     case 'S': encoded_char = 'S'; break;
  35.     case 'T': encoded_char = 'i'; break;
  36.     case 'U': encoded_char = 'z'; break;
  37.     case 'V': encoded_char = 'K'; break;
  38.     case 'W': encoded_char = 'y'; break;
  39.     case 'X': encoded_char = 'x'; break;
  40.     case 'Y': encoded_char = 'h'; break;
  41.     case 'Z': encoded_char = 'w'; break;
  42.  
  43.     case 'a': encoded_char = 'R'; break;
  44.     case 'b': encoded_char = 'Q'; break;
  45.     case 'c': encoded_char = 'Z'; break;
  46.     case 'd': encoded_char = 'g'; break;
  47.     case 'e': encoded_char = 'D'; break;
  48.     case 'f': encoded_char = 'v'; break;
  49.     case 'g': encoded_char = 'f'; break;
  50.     case 'h': encoded_char = 'u'; break;
  51.     case 'i': encoded_char = 'J'; break;
  52.     case 'j': encoded_char = 't'; break;
  53.     case 'k': encoded_char = 'P'; break;
  54.     case 'l': encoded_char = '0'; break;
  55.     case 'm': encoded_char = 's'; break;
  56.     case 'n': encoded_char = 'e'; break;
  57.     case 'o': encoded_char = 'r'; break;
  58.     case 'p': encoded_char = 'C'; break;
  59.     case 'q': encoded_char = 'Y'; break;
  60.     case 'r': encoded_char = 'q'; break;
  61.     case 's': encoded_char = '9'; break;
  62.     case 't': encoded_char = 'd'; break;
  63.     case 'u': encoded_char = 'I'; break;
  64.     case 'v': encoded_char = 'p'; break;
  65.     case 'w': encoded_char = 'X'; break;
  66.     case 'x': encoded_char = 'W'; break;
  67.     case 'y': encoded_char = 'c'; break;
  68.     case 'z': encoded_char = '8'; break;
  69.  
  70.     case '1': encoded_char = 'o'; break;
  71.     case '2': encoded_char = 'B'; break;
  72.     case '3': encoded_char = '7'; break;
  73.     case '4': encoded_char = 'H'; break;
  74.     case '5': encoded_char = 'V'; break;
  75.     case '6': encoded_char = 'n'; break;
  76.     case '7': encoded_char = 'm'; break;
  77.     case '8': encoded_char = 'G'; break;
  78.     case '9': encoded_char = '6'; break;
  79.     case '0': encoded_char = 'a'; break;
  80.  
  81.     case ' ': encoded_char = 'b'; break;
  82.     case '.': encoded_char = 'O'; break;
  83.     case '?': encoded_char = '5'; break;
  84.     case '!': encoded_char = 'F'; break;
  85.     default: encoded_char = '@';
  86.     }
  87.  
  88.     // Return the encoded character.
  89.     return encoded_char;
  90. }
  91.  
  92. // Decode a character.
  93. char decode_char(char character)
  94. {
  95.     char decoded_char = '@';
  96.     // Based on the encoded character,
  97.     switch (character)
  98.     {
  99.         // Replace with the original character.
  100.     case 'N': decoded_char = 'A'; break;
  101.     case 'U': decoded_char = 'B'; break;
  102.     case '4': decoded_char = 'C'; break;
  103.     case 'E': decoded_char = 'D'; break;
  104.     case 'M': decoded_char = 'E'; break;
  105.     case '3': decoded_char = 'F'; break;
  106.     case 'l': decoded_char = 'G'; break;
  107.     case 'L': decoded_char = 'H'; break;
  108.     case '!': decoded_char = 'I'; break;
  109.     case '2': decoded_char = 'J'; break;
  110.     case '?': decoded_char = 'K'; break;
  111.     case 'k': decoded_char = 'L'; break;
  112.     case '.': decoded_char = 'M'; break;
  113.     case '1': decoded_char = 'N'; break;
  114.     case 'A': decoded_char = 'O'; break;
  115.     case 'T': decoded_char = 'P'; break;
  116.     case 'j': decoded_char = 'Q'; break;
  117.     case ' ': decoded_char = 'R'; break;
  118.     case 'S': decoded_char = 'S'; break;
  119.     case 'i': decoded_char = 'T'; break;
  120.     case 'z': decoded_char = 'U'; break;
  121.     case 'K': decoded_char = 'V'; break;
  122.     case 'y': decoded_char = 'W'; break;
  123.     case 'x': decoded_char = 'X'; break;
  124.     case 'h': decoded_char = 'Y'; break;
  125.     case 'w': decoded_char = 'Z'; break;
  126.  
  127.     case 'R': decoded_char = 'a'; break;
  128.     case 'Q': decoded_char = 'b'; break;
  129.     case 'Z': decoded_char = 'c'; break;
  130.     case 'g': decoded_char = 'd'; break;
  131.     case 'D': decoded_char = 'e'; break;
  132.     case 'v': decoded_char = 'f'; break;
  133.     case 'f': decoded_char = 'g'; break;
  134.     case 'u': decoded_char = 'h'; break;
  135.     case 'J': decoded_char = 'i'; break;
  136.     case 't': decoded_char = 'j'; break;
  137.     case 'P': decoded_char = 'k'; break;
  138.     case '0': decoded_char = 'l'; break;
  139.     case 's': decoded_char = 'm'; break;
  140.     case 'e': decoded_char = 'n'; break;
  141.     case 'r': decoded_char = 'o'; break;
  142.     case 'C': decoded_char = 'p'; break;
  143.     case 'Y': decoded_char = 'q'; break;
  144.     case 'q': decoded_char = 'r'; break;
  145.     case '9': decoded_char = 's'; break;
  146.     case 'd': decoded_char = 't'; break;
  147.     case 'I': decoded_char = 'u'; break;
  148.     case 'p': decoded_char = 'v'; break;
  149.     case 'X': decoded_char = 'w'; break;
  150.     case 'W': decoded_char = 'x'; break;
  151.     case 'c': decoded_char = 'y'; break;
  152.     case '8': decoded_char = 'z'; break;
  153.  
  154.     case 'o': decoded_char = '1'; break;
  155.     case 'B': decoded_char = '2'; break;
  156.     case '7': decoded_char = '3'; break;
  157.     case 'H': decoded_char = '4'; break;
  158.     case 'V': decoded_char = '5'; break;
  159.     case 'n': decoded_char = '6'; break;
  160.     case 'm': decoded_char = '7'; break;
  161.     case 'G': decoded_char = '8'; break;
  162.     case '6': decoded_char = '9'; break;
  163.     case 'a': decoded_char = '0'; break;
  164.  
  165.     case 'b': decoded_char = ' '; break;
  166.     case 'O': decoded_char = '.'; break;
  167.     case '5': decoded_char = '?'; break;
  168.     case 'F': decoded_char = '!'; break;
  169.     default: decoded_char = '@';
  170.     }
  171.  
  172.     // Return the decoded character.
  173.     return decoded_char;
  174. }
  175.  
  176. // Encode a string by substitution.
  177. string encode_string(string text)
  178. {
  179.     string encoded_text;
  180.  
  181.     // One character at a time,
  182.     for (size_t i = 0; i < text.size(); ++i)
  183.     {
  184.         // Encode the character and add to new string.
  185.         encoded_text.append(1, encode_char(text[i]));
  186.     }
  187.  
  188.     return encoded_text;
  189. }
  190.  
  191. // Decode a string by substitution.
  192. string decode_string(string text)
  193. {
  194.     string decoded_text;
  195.  
  196.     // One character at a time,
  197.     for (size_t i = 0; i < text.size(); ++i)
  198.     {
  199.         // Decode the character and add to new string.
  200.         decoded_text.append(1, decode_char(text[i]));
  201.     }
  202.  
  203.     return decoded_text;
  204. }
  205.  
  206.  
  207. int main()
  208. {
  209.     // 1 for encode, 2 for decode
  210.     int task = 0;
  211.     // Text to encode or decode.
  212.     string input;
  213.     // Encoded or decoded text.
  214.     string output;
  215.  
  216.     cout << "Would you like to:\n"
  217.         "1. encode text\n"
  218.         "2. decode text\n"
  219.         "Enter 1 or 2: ";
  220.     cin >> task; // Get the task.
  221.     // If the user doesn't choose 1 or 2,
  222.     while ((task != 1) && (task != 2))
  223.     {
  224.         cout << "Please enter 1 or 2: ";
  225.         cin >> task; // Get new input.
  226.     }
  227.     // Confirm user's choice.
  228.     cout << "\nYou chose to ";
  229.     if (task == 1) cout << "encode";
  230.     else cout << "decode";
  231.     cout << " some text.\n";
  232.  
  233.     // If this is encoding, state what characters are allowed.
  234.     if (task == 1)
  235.     {
  236.         cout << "The only characters allowed are:\n"
  237.             "letters, numbers, space, period, "
  238.             "question mark, exclamation point\n";
  239.     }
  240.  
  241.     cout << "\nPlease enter your text:\n";
  242.     // Clear the input buffer.
  243.     cin.ignore(numeric_limits<streamsize>::max(), '\n');
  244.     getline(cin, input); // Get user text to encode or decode.
  245.     // If encode was chosen, encode the text.
  246.     if (task == 1) output = encode_string(input);
  247.     // Otherwise, if decode was chosen, decode the text.
  248.     else output = decode_string(input);
  249.  
  250.     // Announce text is done.
  251.     cout << "\nHere is your ";
  252.     if (task == 1) cout << "encoded";
  253.     else cout << "decoded";
  254.     cout << " text:\n";
  255.     // Display encoded or decoded text
  256.     cout << output << endl;
  257.  
  258.     // End the program.
  259.     return 0;
  260. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement