Concatenación César

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: 
 

  1. 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;
  1.  
  2. 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;
  1.  
  2. 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;
  1.  

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
Producción: 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *