Oppure

Loading
14/05/14 16:11
Dice
Ho un problemino:
voglio fare la codifica e la decodifica di un messaggio usando il cifrario di cesare.
Sono riuscito a fare la codifica facendo così:

cypherText[i] = alfabeto[(alfabeto.IndexOf(cypherText[i]) + 1) % 26];


Però non riesco a fare la decodifica; ho provato a fare così:

cypherText[i] = alfabeto[(alfabeto.IndexOf(cypherText[i]) - 1) % 26];


Però mi da l'errore che indica è andato fuori dal range dei valori dell'array.

Il problema si presenta quando ci sono le 'z', perchè la z corrisponde al valore alfabeto[25]; quindi quando faccio la codifica la z viene sostituita con la 'a', che è alla posizione alfabeto[0].
Quindi io gli dico di fare: (0 - 1) % 26. E allora mi da l'errore.

Ma allora come posso fare per far funzionare la decodifica?
aaa
14/05/14 19:03
Qwertj
Mi sfugge il ruolo del +1 e del -1 in codifica e decodifica:pat:
aaa
14/05/14 19:33
Poggi Marco
Ciao!
Per evitare incongruenze nella decodifica, controlla (alfabeto.IndexOf(cypherText [ i ] ) - 1) % 26. Se risulta negativo, somma 26.
Per una soluzione alternativa, vedi questo articolo: pierotofy.it/pages/guide_tutorials/CSharp/Classe_StringBuilder/
Ultima modifica effettuata da Poggi Marco 14/05/14 19:36
aaa
16/05/14 7:51
Dice
Grazie mille Marco, sono riuscito a risolvere ;)
aaa