1

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


    }
}

私は最後にその数学を行うことによってラップアラウンドします。何が悪いのか手伝ってくれませんか。

編集:このコードは問題ありません。問題はコマンドラインパラメータの処理にあります。

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 に答える