1

我的凯撒密码遇到了意想不到的问题。凯撒是通过将每个字母移动 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; 
        }


    }
}

我最后通过做那个数学来结束。你能帮我看看有什么问题吗?

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

4

1 回答 1

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' ; 

    }
}
于 2012-11-17T18:47:24.757 回答