これは一部の人にとっては非常に単純な解決策のように思えるかもしれませんが、私はしばらくの間それを理解しようとしていて、私を悩ませていました.
int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A');
char c = 'A' + sum%26;
数学は私の得意分野ではありませんでした。と の場合、の値はchar c
最後に 79 になるはずです。p[i]=72 or 'H'
s2[i]=5
この操作は素晴らしく機能しますが、何が起こっているのかを理解しようとしているので、通常の計算機で実行しようとしましたが、間違った答えを出し続けています. 操作の正しい順序と値はどうあるべきですか?
これまでに動作する完全なソースコードは次のとおりです。
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char s2[25];
strcpy(s2, argv[1]);
int keyLen = strlen(s2);
printf("Please enter a string of text to be encrypted!\n");
string p = GetString();
for (int i = 0, n = strlen(p); i < n; i++)
{
if (isupper(p[i])){
int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A');
char c = 'A' + sum%26;
printf("%c", c);
}
}
printf("\n");
printf("%d\n", keyLen);
}
私がこの操作を行っている方法は次のとおりです。
int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A');
//int sum = (72-65) + (72 % 5) - 65) sum= -56
char c = 'A' + sum%26;
//char c = 65 + -56 %26 char c = -8
私は自分の数学がオフであることを明らかに知っていますが、デバッガーsum = 14
を介して操作を実行したときに正しく実行していると思っていchar c = 79 or 'O'
ました。