me parece que hacen mucho trabajo
se puede hacer simple... aunque la "ñ" alarga el codigo de más
por cierto.. tu error está en que la "ñ" es una caracter ascii extendido y en c++ ocupa 2 char (con valor negativo), así que estás tratando de llenar 1 char en el array con el valor de 2
sin la ñ se puede simplificar muchísimo más
#include <iostream>
#include <string>
#include <locale>
using namespace std;
int main(){
cout<<"Introduzca las letras de las que desea conocer su posición\n";
string mensaje;
cin>>mensaje;
locale loc;
int i;
for(i=0;i<mensaje.size();i++){
mensaje[i] = tolower(mensaje[i], loc);//a minusculas
if(mensaje[i]>='a' && mensaje[i]<='z'){
if(mensaje[i]>'n'){//para meter la ñ que no está en ascii standard
mensaje[i]++;
}
mensaje[i]-='a'-1;//para ubicarlo en el orden natural
cout<<(int)mensaje[i];//imprimimos casteando como int
cout<<endl;
}
if(mensaje[i]==-61){//aquí está la ñ de ascii extendido
i++;//la ñ ocupa 2 char, así que avanzamos 1 de una vez
if(mensaje[i]==-111 || mensaje[i]==-79){//aseguramos que es ñ
mensaje[i]='n'-'a'+1;//va siguiente a la n y arreglamos su orden natural
cout<<(int)mensaje[i];//imprimimos casteando como int
cout<<endl;
}
}
}
cin.get();
return 0;
}