c语言while语句

.从键盘输入一段英文,直到换行结束,将其中所有字母大小写不变向后循环移动3个,实现加密处理,其他字符不变。
说明:a->d、b->e、c->f …… x->a、y->b、z->c,如输入“This is a book.”则得到“Wklv lv d errn.”。
这个程序向后循环移动3个是什么意思?

向后移是指,把26个字母看成一个环,a向后移三位就是d,b向后移三位就是e,...,z的话,向后移三位就是c
大写小写都是一个环
小写的环:abcdefghigklmnopqrstuvwxyzabcdefg...,大写的也一样。


#include <stdio.h>
int main()
{
    char str[256];
    scanf("%s", str); 
    
    int i = 0;
    printf("%s\n", str);
    while(*(str + i) != '\0')
    {
        if ((*(str + i) >= 'A' && *(str + i) <= 'W') || (*(str + i) >= 'a' && *(str + i) <= 'w'))
            *(str + i) = *(str + i) + 3;
        else if ((*(str + i) >= 'X' && *(str + i) <= 'Z') || (*(str + i) >= 'x' && *(str + i) <= 'z'))
            *(str + i) = *(str + i) - 23;
        
        ++i;
    }
    
    printf("%s\n", str);
    return 0;
}

img