Таблица символов ASCII показывает, что строчная буква «a» - это char (97), а строчная буква «A» - это char (65). Итак, для преобразования из строчных в строчные, добавьте 32:
if (text[i] >= 65 && text[i] < 91) {
text[i] += 32;
}
изменить: добавить вместо вычитать
Вот более полный, рабочий пример:
#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>
int main() {
char caesar[26] = {'b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a'};
char text[32] = {'W','g','o','W','K','I','y','X','T','J','U','P','S','f','Y','z','d','x','t','r','j','c','p','I','P','W','I','e','N','J','T'};
char lower[32] = {0};
char cipher[32] = {0};
printf("Original text is %s\n", text);
for (int i = 0; i < 32; i++) {
int index;
/* Use `tolower` from ctype.h
{
lower[i] = tolower(text[i]);
index = lower[i] - 'a';
}
*/
/* Roll your own `tolower` */
{
index = (int)text[i];
/* convert uppers to lowers */
if (index >= 65 && index < 91) {
index += 32;
}
lower[i] = index;
/* remove offset from chars */
index -= (int)'a';
}
cipher[i] = caesar[index];
}
printf("Lowercase text is %s\n", lower);
printf("Caesar ciphertext is %s\n", cipher);
return 0;
}