C++ での文字のローテーション 13 転置が、意図したとおりに機能しません。すべての文字は最初に大文字にされたので、ASCII 番号 65-90 のみが関連します。文字が 77 を超える場合は、'A' に折り返される分を差し引きます。
for (int j = 0; j < plainStr.length(); ++j)
{
int x = plainStr[j];
// if-statement one
if(x==32) // keep spaces
{
cryptStr = cryptStr + (char)x;
}
// if-statement two
if((x>=65) && (x<=77)) // rotate 'A' through 'M' by +13
{
x=x+13;
cryptStr = cryptStr + (char)x;
}
// if-statement three
if((x>77) && (x<=90)) // rotate 'N' through 'Z' by -26+13=-13
{
x=x-13;
cryptStr = cryptStr + (char)x;
}
問題は、if ステートメント 1 と 2 が意図したとおりに機能することです。実際、'A' に戻さずに ASCII を直接 +13 転置すると、コードは正常に動作します。しかし、if ステートメント 3 を組み込むとすぐに、正しくない 2 文字の出力が得られ始め、後で復号化できなくなります。例えば:
入力文字列: "THIS IS ALL I GOTS"
出力を与える: "GUHVIF VIF NAYLYL VI TGBGF"
T = G
H = UH
私=Ⅵ
S = F
どうか、私は何が欠けている/見落としていますか???