ok, ya lo mirare, lo del mens2 sirve para guardar las letras y cifrar-las y descifrarlas.
Stakewinner00 existe una especie de estándar (más que un estándar son buenas prácticas), que dicen por ejemplo que hay que utilizar nombres de variables descriptivos. Queda más legible esto(aunque 0xDani lo decía por las comillas dobles yo me refiero a los nombres descriptivos):
string segundoMensaje = " ";
string mensajeDos = " ";
string mensaje2 = " ";
Que:
string mens2 = " ";
Aunque eso es lo de menos, a la larga te servirá mucho si utilizas muchas variables en un programa ya que si pones mens1 mens2 mens3. Al final no te acuerdas ni de lo que era cada uno. En este caso me parece que mens2, es un buffer donde se almacena el texto a cifrar así que no estaría mal este nombre:
string textoAEncriptar = " ";
Otro tema es que usas una función obsoleta, yo también la usaba hace tiempo hasta que me lo dijeron aquí. La función atoi está obsoleta, ahora se usa strtol:
long int strtol ( const char * str, char ** endptr, int base );
Referencia -->
http://www.cplusplus.com/reference/cstdlib/strtol/Otra cosa que remarcar, no es nada del otro mundo solo que se te ha pasado (ya que he visto que en time si has puesto ctime)es que estás agregando un archivo de cabecera de C en C++ en concreto:
#include <stdio.h>
Que deberías cambiar por:
#include <cstdio>
Más cosas.Te faltan dos librerías en los comentarios indico para que funciones son:
#include <cstdlib> //Para srand() y rand()
#include <cstring> //Para strcpy()
PD: está muy bueno lo he probado con un archivo de código fuente .c y vá bien, ¡gran trabajo!