Вы можете заменить этот огромный оператор switch следующим:
if (isalpha(string[ctr]))
{
int index = toupper(string[ctr]) - 'A';
cout << crypt[index];
}
else
cout << " ";
Кроме того, не вызывайте strlen для каждой итерации цикла for, просто сделайте это один раз:
for(int ctr=0, len=strlen(string); ctr<len; ctr++)
{
....
}
Несколько других примечаний:
- склеп слишком мал, он должен иметь размер 27
- Если вы используете
getline
вместо operator>>
, пользователь может правильно ввести пробелы
- Ваш код подвержен переполнению буфера. Используйте
std::string
, и вы можете забыть о них.
Обратите внимание, что, как говорит Керрек, предполагается, что в используемом наборе символов заглавные буквы A-Z расположены в последовательности. Но я думаю, что случаи, когда это не так, настолько редки, что вы можете спокойно их игнорировать.