hola amigo.
Bueno pues algo parecido me paso a mi y pues la solución es la misma para tu código y es que hay que manejar los valores ascii para obtener la letra correcta en tu caso a la mayoría de las letras se les tienen que suma 5 al imprimirla pero hay excepciones y hay letras que necesitan otro tipo de suma o resta en este caso ya no me dio tiempo de hacer la prueba con todo el abecedario y solo me enfoque en la palabra jose hay te toca verificar que otras palabras necesitan una suma o resta diferente a 5.
y bueno el código en la parte de decodificar queda así.
Código C++:
Ver originalfor(x=0;x<27;x++){
if(nombre2.find(cod[x])!= string::npos){
if( (le[x] == 'o') )
cout<<le[x+4];
else if(le[x] == 's')
cout<<le[x-14];
else
cout<<le[x+5];
}
}
Bueno es el único método que e encontrado si es que encontraste otro espero que lo compartas.
Bueno espero haberte ayudado.
Saludos.
Drewermerc.