2017-09-22 7 views
0

나는 시저 암호로 작업 중이며 문자의 ascii를 기반으로 배열에 내 암호 키의 문자를 저장하려고합니다. 대변한다고 생각 했어. 그래서 만약 내 암호 char key [] = "codezyxwvutsrqpnmlkjihgfba" 배열의 첫 번째 문자 (c)는 ascii num이 97 인 문자 a를 나타냅니다. 따라서 97 번째 자리에 배열에 c를 저장하고 싶습니다. 매번이 배열을 시도하면 배열이 비어있게됩니다.배열에서 문자를 ascii num 위치에 저장하는 방법 c

char key[] = {"codezyxwvutsrqpnmlkjihgfba"}; 

char alphabet[] = {"abcdefghijklmnopqrstuvwxyz"}; 

char answerKey[200] = ""; 

for (int i = 0; key[i] != '\0'; i++) { 
    answerKey[(int) alphabet[i]] = key[i]; 
} 

for (int i = 0; answerKey[i] != '\0'; i++) { 
    printf("%c", answerKey[i]); 
} 
+1

표제에 대한 응답이 'A [C = C를이다' –

+3

을 지표로 문자의 ASCII 코드를 사용하여 요소 97에서 122까지만 값을 할당합니다. 다른 모든 요소는 0입니다. 따라서 인쇄 루프가 작동하지 않습니다 :'answerKey [0]'이 0입니다. (루프 조건'str [i]! = '\ 0''은 널 문자가 내장되어 있지 않은 문자열에만 유용합니다.) –

+0

'(key [i] -97) % 27)'처럼 알파벳의 크기를 줄여야합니다. 이 방법으로 27 개의 알파벳 배열로만 저장할 수 있습니다! –

답변

0

answerkey 배열은 단지 97의 범위의 값을 가지기 때문에 - 만 배열의 다른 원소 쓰레기 저급 알파벳을 사용하는 가정 (122).

print for 루프를 97에서 122로 반복 변경하면 원하는 결과를 얻을 수 있습니다.

char key[] = {"codezyxwvutsrqpnmlkjihgfba"}; 

char alphabet[] = {"abcdefghijklmnopqrstuvwxyz"}; 

char answerKey[200]=""; 

for (int i = 0; key[i] != '\0'; i++) { 
    printf("%c",alphabet[i]); 
    answerKey[(int) alphabet[i]] = key[i]; 
    printf("%c",answerKey[(int)alphabet[i]]); 
} 
printf("\n"); 
int i=0; 
for (i = 97;i<=122; i++) 
{ 
    printf("%c", answerKey[i]); 
} 
0

당신은 첫 번째 요소에서 answerKey[] 배열하여 인쇄를 시작하고 '\0' 안타 즉시 중지를 말하고있다. 나는 이 '\0'이 아니어야한다고 생각하지 않는다. 왜냐하면 인쇄 가능한 아스키 문자가 0이 아니기 때문이다. 나는 answerKey[] 배열이 97-122 요소를 제외하고는 비어있을 것을 기대한다. 따라서 암호가 알파벳 소문자로만 사용된다면, 배열의 해당 부분 만 살펴보십시오.

또는 answerKey[] 배열에 배치 할 때 요소 주소에서 'a'을 뺀 코드를 저장할 수있는 충분한 공간을 만들 수 있습니다. 이 경우 트릭을 수행 할 수 있습니다.

char answerKey[27] = ""; 

for (int i = 0; key[i] !='\0'; i++) { 
    answerKey[(int) alphabet[i] - 'a'] = key[i]; 
} 
0

C에서는 단순히 캐스트를 실행하여 char을 int로 변환 할 수 있습니다.

메모리에서 문자 'a'가 있으면 값 97이 저장됩니다. char를 사용할 때, 이것은 메모리에 쓰여진 것을 이해하는 방법 일뿐입니다. 이 메모리를 int로 취급하고 거기에 저장된 값을 얻을 수 있습니다. 예를 들어

: 추가 정보

char c = 'a'; 
printf("char is %c, int is %d", c, (int)(c)); 
// Output would be: 
// char is a, int is 97 

, 읽어 How are different types stored in memory