これは edx.org の cs50x コースの pset2 にある Caesar の暗号暗号化問題です。
私はすでに別のアルゴリズムでこの問題を解決しましたが、これは私の最初の試みであり、シーザーテキストの右側にこれらすべての記号が表示される理由にまだ興味があります.
すなわち。テキスト「Testing
」を入力すると、出力は「Fqefuz�����w����l��B��
」になりますが、答えは記号なしで正解です。
誰か私にそれを説明できますか?
int main(int argc, string argv[])
{
bool keyOk = false;
int k = 0;
do
{
if(argc != 2) // Checking if the key was correctly entered.
{
printf("You should enter the key in one argument from"
" the prompt(i.e. './caesar <key>').\n");
return 1;
}
else
{
k = atoi(argv[1]); // Converting string to int.
keyOk = true; // Approving key.
}
}
while(keyOk == false);
string msg = GetString(); // Reading user input.
char caesarMsg[strlen(msg)];
for(int i=0, n = strlen(msg); i < n; i++)
{
if( (msg[i] >= 'a') && (msg[i] <= 'z') )
// Processing lower case characters
{
caesarMsg[i] = ((((msg[i] - 97) + k) % 26) + 97);
}
else if( (msg[i] >= 'A') && (msg[i] <= 'Z') )
// Processing upper case characters
{
caesarMsg[i] = ((((msg[i] - 65) + k) % 26) + 65);
}
else
{
caesarMsg[i] = msg[i];
}
}
printf("%s", caesarMsg);
printf("\n");
}