有人可以帮我解释这个代码[关闭]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有人可以帮我解释这个代码[关闭]相关的知识,希望对你有一定的参考价值。

我在网上找到了这个Caesar密码加密代码,我试图了解它是如何工作的

#include<stdio.h>

int main()
{
char message[100], ch;
int i, key;

printf("Enter a message to encrypt: ");
gets(message);
printf("Enter key: ");
scanf("%d", &key);

for(i = 0; message[i] != '\0'; ++i){
    ch = message[i];

    if(ch >= 'a' && ch <= 'z'){
        ch = ch + key;

        if(ch > 'z'){
            ch = ch - 'z' + 'a' - 1;
        }

        message[i] = ch;
    }
    else if(ch >= 'A' && ch <= 'Z'){
        ch = ch + key;

        if(ch > 'Z'){
            ch = ch - 'Z' + 'A' - 1;
        }

        message[i] = ch;
    }
}

printf("Encrypted message: %s", message);

return 0;
}
  • if(ch >= 'a' && ch <= 'z')的意思就像c包括字母作为数组或某事或如何知道字母是b或其他?
  • ch = ch + key;中为char添加一个int
  • 这个数学的东西ch = ch - 'Z' + 'A' - 1;

非常感谢

答案

代码为每个输入的字符添加一定的值(key),如果小帽子和a-z(如果是大帽子)则“旋转”A-Z范围内的字符。

在C中,每个单个字符都有一个隐含的ascii/int值,而compare运算符用于决定输入的字符是否在字符集a-z(彼此对齐)之后,或者它是否在A-Z的集合中也跟在后面彼此。

如果输入的字符加上key“overhoots”f.e,则其余的代码处理环绕。 zZ并通过减去'z'的值并添加'a' -1的值来循环它,以便得到的char再次在a-zA-Z的选定范围内的一个

以上是关于有人可以帮我解释这个代码[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

有人可以解释这个 PHP 代码吗? [关闭]

有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]

有人可以帮我使用我的随机代码生成器吗? [关闭]

C++ 代码片段执行

有人可以解释为啥以下代码中的总 = 7 吗?与静态整数总和? [关闭]

有人可以解释所有代码的含义吗?蟒蛇[关闭]