求解答一下这道c语言!

利用一维字符数组实现一段英文的加密,如“I love you so much. Would you marry me?”。加密原则为:将英文字符向后循环滚动8位,如‘a’转变为‘i’、‘q’转变为‘y’,‘Z’转变为‘H’,空格和标点符号等字符保持不变。打印输出加密后的密文。

参考如下:

#include <stdio.h>
 
int main()
{ 
    char str[100];
    gets(str);
 
    int i;
    for(i = 0; str[i] != '\0'; i++)
    {
        if ((str[i] >= 'a' && str[i] <= 'z' - 8) || (str[i] >= 'A' && str[i] <= 'Z' - 8))
        {
            str[i] += 8;
        } 
        else if ((str[i] > 'z' - 8 ) && str[i] <= 'z') 
        {
            str[i] = 'a' + str[i] - 'z' + 7;
        } 
        else if ((str[i] > 'Z' - 8 ) && str[i] <= 'Z') 
        {
            str[i] = 'A' + str[i] - 'Z' + 7;
        }
    }
 
    printf("%s", str);
 
    return 0;
}
 
 

我可以

这个很简单啊!首先判断元素是否为英文字母,含大小写,通过ascii码,直接把数组的元素取出来+8给到新的数组就可以了啊!

供参考:

#include <stdio.h>
int main()
{
    char str[81];
    int  offset = 8, i;
    gets(str);
    for (i = 0; str[i]; i++)
    {
        if (str[i] >= 'A' && str[i] <= 'Z')
            str[i] = (str[i] - 'A' + offset) % 26 + 'A';
        else if (str[i] >= 'a' && str[i] <= 'z')
            str[i] = (str[i] - 'a' + offset) % 26 + 'a';
    }
    printf("%s", str);;
    return 0;
}