저는 cs50 pset2에서 작업 해 왔으며 몇 일 동안 작업 한 후에 vigenere 암호가 있다고 생각했습니다. 이 코드는 사용자가 지정한 알파벳순 인수 (argv [])를 취하여 사용자 (문자열)가 제공 한 구를 알파벳순 색인의 번호로 암호화하는 데 사용됩니다. 예를 들어, 인수 'abc'와 문자열 'cat'을 입력하면 출력은 'cbv'(이동 0, b 이동 1, c 이동 2) 여야합니다. 인수가 또한 줄 바꿈되어 문자열이 더 길면 인수는 첫 번째 문자로 바뀌고 문자열이 끝날 때까지 계속됩니다.Vigenere Cipher. 코드 출력
이것은 내가 코드를 가지고 무엇을 :
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(int argc, string argv[])
{
if(argc != 2)
{
printf("Try again\n");
return 1;
}
string k = (argv[1]);
int klen = strlen(k);
for(int x = 0; x < klen; x++)
{
if(isalpha(k[x]))
{
if(isupper(k[x]))
{
k[x] = tolower(k[x]);
}
k[x] -= 'a';
}
else
{
printf("Try again\n");
return 1;
}
}
string code = GetString();
int clen = strlen(code);
for(int a = 0, b = 0; a < clen; a++)
{
if(isalpha(code[a]))
{
int key = k[b%klen];
if(isupper(code[a]))
{
printf("%c", (((code[a] - 'A') + key)%26) + 'A');
b++;
}
else
{
printf("%c", (((code[a] - 'a') + key)%26) + 'a');
b++;
}
}
else
{
printf("%c", code[a]);
}
}
printf("\n");
}
코드는 키 1의 길이를 위해 작동하는 것 같다. 예를 들면, I 입력 'AAAA'
의 인수이어서 올바르게 입력 'BBBBB'BBBBB " 받는 스트링.
그러나, 내가 입력 같은 'AAAA'
그런 다음 입력 이상 키 +1 'bbbbbbb' 보다 문자열이 내가받을 'bbbbbNN'
은 내가 내 주문에 문제가 생각 작동하지만 주위에 움직이는 괄호를 쓸모없는 시도했다. 내 열쇠가 제대로 포장되지 않는 이유에 대해 누군가가 올바른 방향으로 나를 가리킬 수 있기를 바랍니다.
나는 당신의 입력이 재현 할 수없는'aaaa'와'bbbbbbb', 난 그냥 '할당, 어떤'string' 유형을 사용하고 있지 않다하더라도 숯불 * k에 =을 argv [: 그것은 당신을 위해 더 나은 작동하는지 확인 1];''char * code = argv [2]; 나머지는 게시자의 것입니다. –
세 번째 printf는'printf ("% c", ((code [a] - 'a') + k (% c)] 여야한다고 생각합니다. [b % klen] - 'A')) % 26) + 'a'); '. –
Bob, 고마워. 그것은 분명히 문제의 일부였습니다. 내 코드를 업데이트했지만, 지금은'bbbbbNN' 대신'bbbbbhh'을 얻고 있습니다. 코드 주위에 키를 래핑하는 데 여전히 문제가있는 것처럼 보입니다. –