Ciao, da un'occhiata veloce non mi sembra che ci siano errori; in ogni caso al fine di snellire un po' il codice farei qualcosa del genere:
C++:
#include <iostream>
#include <string>
using namespace std;
void convertToLowercase(string &s)
{
for(unsigned int length = s.size(), i = 0; i < length; ++i)
{
s[i] = tolower(s[i]);
}
}
void encryptPhrase(string &s, unsigned int key)
{
for(unsigned int length = key ? s.size() : 0, i = 0; i < length; ++i)
{
if(s[i] >= 'a' && s[i] <= 'z' && (s[i] += key) > 'z')
{
s[i] = 'a' + s[i] - 'z' - 1;
}
}
}
int main()
{
string s;
unsigned int key;
cout << "INPUT:\t";
getline(cin, s);
convertToLowercase(s);
cout << "KEY:\t";
cin >> key;
key %= 'z' - 'a' + 1;
encryptPhrase(s, key);
cout << "OUTPUT:\t" << s << endl;
}