Caesar Concatenation
Abhijit Tripathy
Posted on February 13, 2021
Given two strings str1 and str2 containing alphanumeric characters and a number N. The task is to form a new encrypted string which contains the string str1 with a Ceaser Encryption of N characters and the string str2 with a Ceaser Encryption of N characters at odd indices.
Example:
Input: str1 = “GeekforGeeks”, str2 = “Geeks123”, N = 4
Output: KiiojsvKiiowKeikw163
Explanation:
Caesar Text for string str1 with a shift of 4 is “KiiojsvKiiow”
Caesar Text for string str2 with a shift of 4 at all even indexes is “Keikw163”
Resultant string is “KiiojsvKiiow” + “Keikw163” = “KiiojsvKiiowKeikw163”Input: str1 = “ABcdE23”, str2 = “efda2w”, N = 9
Output: JKlmN12nfma1w
Explanation:
Caesar Text for string str1 with a shift of 9 is “JKlmN12”
Caesar Text for string str2 with a shift of 9 at all even indexes is “nfma1w”
Resultant string is “JKlmN12” + “nfma1w” = “JKlmN12nfma1w”
Approach:
This problem is an application of Caesar Cipher in Cryptography. Below are the steps:
The idea is to traverse the given string str1 and str2 and convert all the characters at every index of str1 and at even indexes of str2 by a shift of N on the basis of below 3 cases:
Case 1: If characters lies between ‘A’ and ‘Z’ then the current character is encrypted as:
new_character = ( (current_character - 65 + N) % 26 ) + 65;
Case 2: If characters lies between ‘a’ and ‘z’ then the current character is encrypted as:
new_character = ( (current_character - 97 + N) % 26 ) + 97;
Case 3: If characters lies between ‘A’ and ‘Z’ then the current character is encrypted as:
new_character = ( (current_character - 48 + N) % 10 ) + 48;
Below is the implementation of the above approach:
// C++ implementation of the above
// approach
#include <bits/stdc++.h>
using namespace std;
void printCaesarText(string str1,
string str2, int N)
{
// Traverse the string str1
for (int i = 0; str1[i]; i++) {
// Current character
char ch = str1[i];
// Case 1:
if (ch >= 'A' && ch <= 'Z') {
str1[i] = (ch - 65 + N) % 26 + 65;
}
// Case 2:
else if (ch >= 'a' && ch <= 'z') {
str1[i] = (ch - 97 + N) % 26 + 97;
}
// Case 3:
else if (ch >= '0' && ch <= '9') {
str1[i] = (ch - 48 + N) % 10 + 48;
}
}
for (int i = 0; str2[i]; i++) {
// If current index is odd, then
// do nothing
if (i & 1)
continue;
// Current character
char ch = str2[i];
// Case 1:
if (ch >= 'A' && ch <= 'Z') {
str2[i] = (ch - 65 + N) % 26 + 65;
}
// Case 2:
else if (ch >= 'a' && ch <= 'z') {
str2[i] = (ch - 97 + N) % 26 + 97;
}
// Case 3:
else if (ch >= '0' && ch <= '9') {
str2[i] = (ch - 48 + N) % 10 + 48;
}
}
// Print the concatenated strings
// str1 + str2
cout << str1 + str2;
}
// Driver Code
int main()
{
string str1 = "GeekforGeeks";
string str2 = "Geeks123";
int N = 4;
printCaesarText(str1, str2, N);
return 0;
}
Output:
KiiojsvKiiowKeikw163
Time Complexity: O(N + M), where N and M are the lengths of the two given string.
Posted on February 13, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.