Caesar Concatenation

Given two strings str1 and str2 containing alpha-numeric characters and a number N. The task is to form a new encrypted string which contains the string str1 with a Caesar Encryption of N characters and the string str2 with a Caesar 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:
CPP
// 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 Codeint main(){ string str1 = "GeekforGeeks"; string str2 = "Geeks123"; int N = 4; printCaesarText(str1, str2, N); return 0;} |
Python3
# Python implementation of the above# approachdef printCaesarText(str1, str2, N): # Traverse the string str1 for i in range(len(str1)): # Current character ch = str1[i] # Case 1: if (ch >= 'A' and ch <= 'Z'): str1[i] = chr((ord(ch) - 65 + N) % 26 + 65) # Case 2: elif (ch >= 'a' and ch <= 'z'): str1[i] = chr((ord(ch) - 97 + N) % 26 + 97) # Case 3: elif (ch >= '0' and ch <= '9'): str1[i] = chr((ord(ch) - 48 + N) % 10 + 48) for i in range(len(str2)): # If current index is odd, then # do nothing if (i & 1): continue # Current character ch = str2[i] # Case 1: if (ch >= 'A' and ch <= 'Z'): str2[i] = chr((ord(ch) - 65 + N) % 26 + 65) # Case 2: elif (ch >= 'a' and ch <= 'z'): str2[i] = chr((ord(ch) - 97 + N) % 26 + 97) # Case 3: elif (ch >= '0' and ch <= '9'): str2[i] = chr((ord(ch) - 48 + N) % 10 + 48) # Print the concatenated strings # str1 + str2 print("".join(str1 + str2))# Driver Codestr1 = "GeekforGeeks"str2 = "Geeks123"N = 4printCaesarText(list(str1), list(str2), N)# This code is contributed by Shubham Singh |
Javascript
// javascript implementation of the above// approachfunction printCaesarText(str1, str2, N){ // Traverse the string str1 for (let i = 0; i < str1.length; i++) { // Current character let ch = str1[i]; // Case 1: if (ch >= 'A' && ch <= 'Z') { str1[i] = String.fromCharCode((ch.charCodeAt(0) - 65 + N) % 26 + 65); } // Case 2: else if (ch >= 'a' && ch <= 'z') { str1[i] = String.fromCharCode((ch.charCodeAt(0) - 97 + N) % 26 + 97); } // Case 3: else if (ch >= '0' && ch <= '9') { str1[i] = String.fromCharCode((ch.charCodeAt(0) - 48 + N) % 10 + 48); } } for (let i = 0; i < str2.length;i++) { // If current index is odd, then // do nothing if (i%2 != 0) continue; // Current character let ch = str2[i]; // Case 1: if (ch >= 'A' && ch <= 'Z') { str2[i] = String.fromCharCode((ch.charCodeAt(0) - 65 + N) % 26 + 65); } // Case 2: else if (ch >= 'a' && ch <= 'z') { str2[i] = String.fromCharCode((ch.charCodeAt(0) - 97 + N) % 26 + 97); } // Case 3: else if (ch >= '0' && ch <= '9') { str2[i] = String.fromCharCode((ch.charCodeAt(0) - 48 + N) % 10 + 48); } } // Print the concatenated strings // str1 + str2 console.log(str1.join("") + str2.join(""));} // Driver Codelet str1 = "GeekforGeeks";let str2 = "Geeks123";let N = 4;printCaesarText(str1.split(""), str2.split(""), N);// The code is contributed by Nidhi goel. |
Java
/*package whatever //do not write package name here */import java.io.*;class GFG { // Java implementation of the above approachpublic static void printCaesarText(String str1, String str2, int N) { // Traverse the string str1 for (int i = 0; i < str1.length(); i++) { // Current character char ch = str1.charAt(i); // Case 1: if (ch >= 'A' && ch <= 'Z') { str1 = str1.substring(0, i) + (char)((int)(ch - 65 + N) % 26 + 65) + str1.substring(i + 1); } // Case 2: else if (ch >= 'a' && ch <= 'z') { str1 = str1.substring(0, i) + (char)((int)(ch - 97 + N) % 26 + 97) + str1.substring(i + 1); } // Case 3: else if (ch >= '0' && ch <= '9') { str1 = str1.substring(0, i) + (char)((int)(ch - 48 + N) % 10 + 48) + str1.substring(i + 1); } } // Traverse the string str2 for (int i = 0; i < str2.length(); i++) { // If current index is odd, then // do nothing if (i % 2 == 1) continue; // Current character char ch = str2.charAt(i); // Case 1: if (ch >= 'A' && ch <= 'Z') { str2 = str2.substring(0, i) + (char)((int)(ch - 65 + N) % 26 + 65) + str2.substring(i + 1); } // Case 2: else if (ch >= 'a' && ch <= 'z') { str2 = str2.substring(0, i) + (char)((int)(ch - 97 + N) % 26 + 97) + str2.substring(i + 1); } // Case 3: else if (ch >= '0' && ch <= '9') { str2 = str2.substring(0, i) + (char)((int)(ch - 48 + N) % 10 + 48) + str2.substring(i + 1); } } // Print the concatenated strings // str1 + str2 System.out.print(str1 + str2); } // Driver Code public static void main(String args[]) { String str1 = "GeekforGeeks"; String str2 = "Geeks123"; int N = 4; printCaesarText(str1, str2, N); }} |
C#
using System;class Program { static void printCaesarText(string str1, string str2, int N) { // Traverse the string str1 for (int i = 0; i < str1.Length; i++) { // Current character char ch = str1[i]; // Case 1: if (ch >= 'A' && ch <= 'Z') { str1 = str1.Remove(i, 1).Insert(i, ((char)((ch - 65 + N) % 26 + 65)).ToString()); } // Case 2: else if (ch >= 'a' && ch <= 'z') { str1 = str1.Remove(i, 1).Insert(i, ((char)((ch - 97 + N) % 26 + 97)).ToString()); } // Case 3: else if (ch >= '0' && ch <= '9') { str1 = str1.Remove(i, 1).Insert(i, ((char)((ch - 48 + N) % 10 + 48)).ToString()); } } for (int i = 0; i < str2.Length; i++) { // If current index is odd, then do nothing if ((i & 1) == 1) { continue; } // Current character char ch = str2[i]; // Case 1: if (ch >= 'A' && ch <= 'Z') { str2 = str2.Remove(i, 1).Insert(i, ((char)((ch - 65 + N) % 26 + 65)).ToString()); } // Case 2: else if (ch >= 'a' && ch <= 'z') { str2 = str2.Remove(i, 1).Insert(i, ((char)((ch - 97 + N) % 26 + 97)).ToString()); } // Case 3: else if (ch >= '0' && ch <= '9') { str2 = str2.Remove(i, 1).Insert(i, ((char)((ch - 48 + N) % 10 + 48)).ToString()); } } // Print the concatenated strings str1 + str2 Console.WriteLine(str1 + str2); } static void Main(string[] args) { string str1 = "GeekforGeeks"; string str2 = "Geeks123"; int N = 4; printCaesarText(str1, str2, N); }} |
KiiojsvKiiowKeikw163
Time Complexity: O(N + M), where N and M are the length of the two given string.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



