Ciao, è da un po' che sto cercando di risolvere questo problema con il Cifrario di Cesare dove, assegnato un testo ed una chiave (entrambi stringhe e della stessa lunghezza), ogni lettera del testo originale viene sostituita aggiungendo la posizione della corrispondente lettera della chiave.
Per esempio, se ho C devo aggiungere due posizioni al testo, se ho D ne devo aggiungere tre ecc...
Il codice che ho sviluppato è il seguente, utilizzando i caratteri come interi secondo la codifica ASCII. E sembra funzionare con i singoli caratteri e con alcune stringhe, ma inizia a buggarsi all'interno di altre superando il valore '90' che corrisponde alla 'Z'.
La mia supposizione è che sia un problema di buffer (?) anche se non ne sono molto sicuro.
Di seguito il codice.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
void cifratura (char te[], char ch[], char ci[]);
void main()
{
char testo[MAX], cifrato[MAX], chiave[MAX];
printf("Inserire il testo da cifrare\n(N.B. il testo deve essere il maiuscolo e senza spazi.)\n\n");
gets(testo);
printf("Inserire una chiave di cifratura, con le stesse modalita' del testo.\n\n");
gets(chiave);
printf("La cifratura del vostro testo e':\n");
cifratura(testo,chiave,cifrato);
}
void cifratura (char te[], char ch[], char ci[])
{
int i=0;
if (te[i]<65 || te[i]>90 || ch[i]<65 || ch[i]>90 || ch[i]==32 || te[i]==32)
printf("Errore: chiave o testo inseriti in modo errato.\n");
else
{
if ((te[i]+(ch[i]-65))<90)
{
for (i=0;i<strlen(te);i++)
ci[i]=te[i]+(ch[i]-65);
}
else
{
for (i=0;i<strlen(te);i++)
ci[i]=(((ch[i]-65)+te[i])-90)+65;
}
for (i=0;i<strlen(te);i++)
printf("%c",ci[i]);
}
}