Ejemplo de programación de ranuras
De acuerdo con la explicación del proceso en la segunda imagen, puedes entender el proceso de cifrado:
Primero, construye una matriz como se muestra en la imagen para cada n caracteres. Reordenar en orden crítico. Finalmente sintetiza y genera una cadena. Considero este problema aquí como un grupo de n caracteres, por lo que no construyo una matriz bidimensional y la envío en el orden especificado por la clave. De hecho, el orden es el orden del índice después de que los valores clave se ordenan de pequeño a grande. Estoy utilizando el proceso anterior aquí y las instrucciones específicas se adjuntan en la leyenda. Por favor lea los comentarios. No creé una nueva matriz bidimensional para hacerlo. También podría considerar dividir la cadena en una matriz bidimensional, luego reconstruir una nueva matriz bidimensional en el orden del índice de las claves y luego generarlas en orden. He aquí una manera. Mi método requiere relativamente poco espacio y puede que no sea lo suficientemente intuitivo. Consulte:
El código de referencia es el siguiente
# include & ltiostream & gt
#Include "Math.h"
Usar espacio de nombres std
int main(){
char cl[1000] = {' '}, key[11]= { ' \ 0 ' };
int col = 0, maxCharNum = 0, maxKeyNum = 0, keyIndex[10]= { 0 };;
//Obtiene la cadena y encuentra el número de cadenas.
CIN>>noskipws
Haz {
CIN>>cl[col++];
} mientras (cl [col - 1]! = '\n');
cl[col-1]=""; //Reemplazar caracteres de nueva línea con espacios
maxCharNum = col-1; >// Ingrese y encuentre la longitud de la clave y encuentre el orden de índice correcto.
CIN>>Key;
for(int I = 0;i<11;i++){
if(clave[I]= = ' \ 0 ') {
maxKeyNum = I;
Romper;
}
}
for(int I = 0 ; i & ltmaxKeyNumi++)
for(int j = 0; j & ltmaxKeyNumj++)
if((key[j]--0 ')= = I){
keyIndex[I]= j;
Break;
}
//El punto de partida de cada grupo debe ser un múltiplo entero del longitud de la clave.
for(int start = 0; start<maxCharNumstart+= maxKeyNum){
//Recorre cada grupo, cada fila es un elemento maxKeyNum.
for(int I = 0; I & ltmaxKeyNumi++){//Imprime la posición del carácter correspondiente a la cadena original:
col = start+keyIndex[I];
col>maxCharNum? cout & lt& lt':cout & lt& ltcl[col];
}
}
}