C中的凯撒密码 - 意想不到的问题

时间:2012-11-17 18:41:29

标签: c

我的Caesar'c密码遇到了意想不到的问题。 Caesar是指通过将每个字母移动n个数字来加密文本。所以如果它是1,abc将是bcd。我在C语言中处理这个程序,但是对于某些字符,常规字母来说它很奇怪,尽管它应该是正确的。这是问题语法:

    for (int i = 0; i < strlen(text); i++)
{   
    if (text[i] != ' ')
    {
       // printf("\n%i\n", key);

        text[i] = text[i] + key;


        if (text[i] > 122)
        {
            text[i] = text[i] + 97 - 122; 
        }


    }
}

我最后通过做那个数学运算。 你能帮我解决它的错误吗?

编辑:这段代码很好,问题在于处理命令行参数。

1 个答案:

答案 0 :(得分:2)

使用96代替97已解决的问题

所以当你回绕然后实际增加1个额外值 想到这一点;

    ------------------------------------------
    a  |  b |  c |  d  | . . . x  |  y  |  z  |
    --------------------------------------------
    97 | 98 | 99 | 100 | . . .120 | 121 | 122 |
    -------------------------------------------

尝试使用'a','b',.. .. ..,'z'就像这样而不是它们的实际值

在char中使用' '单引号为您提供整数值,即ASCII值

这是代码:

char c;
for (int i = 0; i < strlen(text); i++)
{   
    if (text[i] != ' ')
    {
       // printf("\n%i\n", key);

        c=text[i];    
        text[i] = text[i] + key;

        if(c >='a' && c <='z' && text[i] >'z')
            text[i] = text[i] + 'a' -1 - 'z' ; 

        if(c >='A' && c <= 'Z' && text[i] > 'Z')
            text[i] = text[i] + 'A' -1 - 'Z' ; 

    }
}