Dadas dos strings str1 y str2 que contienen caracteres alfanuméricos y un número N. La tarea es formar una nueva string cifrada que contenga la string str1 con un cifrado César de N caracteres y la string str2 con un cifrado César de N caracteres en índices impares.
Ejemplo:
Entrada: str1 = “GeekforGeeks”, str2 = “Geeks123”, N = 4
Salida: KiiojsvKiiowKeikw163
Explicación:
el texto César para la string str1 con un desplazamiento de 4 es “KiiojsvKiiow” el
texto César para la string str2 con un desplazamiento de 4 en todos los índices pares es “Keikw163” La
string resultante es “KiiojsvKiiow” + “Keikw163” = “KiiojsvKiiowKeikw163”
Entrada: str1 = “ABcdE23”, str2 = “efda2w”, N = 9
Salida: JKlmN12nfma1w
Explicación:
Texto César para la string str1 con un cambio de 9 es “JKlmN12”
Texto César para la string str2 con un desplazamiento de 9 en todos los índices pares es “nfma1w” La
string resultante es “JKlmN12” + “nfma1w” = “JKlmN12nfma1w”
Planteamiento:
Este problema es una aplicación del Cifrado César en Criptografía . A continuación se muestran los pasos:
La idea es atravesar la string dada str1 y str2 y convertir todos los caracteres en cada índice de str1 y en los índices pares de str2 por un cambio de N sobre la base de los siguientes 3 casos:
- Caso 1: si los caracteres se encuentran entre ‘A’ y ‘Z’, el carácter actual se cifra como:
new_character = ( (current_character - 65 + N) % 26 ) + 65;
- Caso 2: si los caracteres se encuentran entre ‘a’ y ‘z’, el carácter actual se cifra como:
new_character = ( (current_character - 97 + N) % 26 ) + 97;
- Caso 3: si los caracteres se encuentran entre ‘A’ y ‘Z’, el carácter actual se cifra como:
new_character = ( (current_character - 48 + N) % 10 ) + 48;
A continuación se muestra la implementación del enfoque anterior:
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 Code int main() { string str1 = "GeekforGeeks"; string str2 = "Geeks123"; int N = 4; printCaesarText(str1, str2, N); return 0; }
Python3
# Python implementation of the above # approach def 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 Code str1 = "GeekforGeeks" str2 = "Geeks123" N = 4 printCaesarText(list(str1), list(str2), N) # This code is contributed by Shubham Singh
KiiojsvKiiowKeikw163
Complejidad de tiempo: O (N + M), donde N y M son la longitud de las dos strings dadas.
Publicación traducida automáticamente
Artículo escrito por AbhijitTripathy y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA