2017-09-22 4 views
0

Je travaille sur un chiffrement César et j'essaie de sauvegarder les caractères de ma clé de chiffrement dans un tableau basé sur l'ascii de la lettre censé représenter. Donc, si mon chiffrement char key [] = "codezyxwvutsrqpnmlkjihgfba" Le premier caractère du tableau (c) est censé représenter la lettre a, dont ascii num est 97. Donc je veux stocker c dans le tableau à la 97ème place. Chaque fois que j'essaye, le tableau est vide.Comment enregistrer un caractère dans un tableau à la position de son ascii num En 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

la réponse au titre est 'a [c] = c;' –

+3

En utilisant les codes ASCII des lettres sous forme d'indices , vous affectez uniquement des valeurs aux éléments 97 à 122; tous les autres éléments sont nuls. Par conséquent, votre boucle d'impression ne fonctionne pas: 'answerKey [0]' est zéro. (La condition de boucle 'str [i]! = '\ 0'' n'est utile que pour les chaînes sans caractères null incorporés.) –

+0

Vous devriez réduire vos alphabets, comme' (touche [i] -97)% 27) '. De cette façon, vous pouvez le stocker dans un tableau de 27 alphabets seulement! –

Répondre

0

Depuis le tableau answerkey a des valeurs que dans la plage de 97-122 que vous utilisez l'alphabet en supposant plus les autres éléments des tableaux sont des ordures. Il suffit de changer l'impression de la boucle pour passer de 97 à 122 et vous obtenez ce que vous voulez.

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

Vous commencez votre impression du tableau answerKey[] au premier élément et lui disant d'arrêter dès qu'il frappe '\0'. Je ne crois pas answerKey[0] ne devrait jamais être '\0' depuis aucun des caractères ascii imprimables sont 0. Je m'attendrais à ce que votre tableau answerKey[] soit vide sauf entre les éléments 97-122, donc si votre chiffre sera utilisé seulement pour les caractères alphabétiques minuscules, peut-être seulement regarder dans cette partie du tableau.

Sinon, vous pouvez faire votre choix answerKey[] seulement tenir assez d'espace pour adapter à votre chiffre en soustrayant 'a' de l'adresse de l'élément que vous placer. Quelque chose comme cela pourrait faire l'affaire:

char answerKey[27] = ""; 

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

En C, vous pouvez convertir un char en un int par préformage simplement un casting.

Dans la mémoire, lorsque vous avez un caractère 'a', la valeur 97 est enregistrée. Lorsque vous utilisez un caractère, c'est juste la façon dont vous comprenez ce qui est écrit dans la mémoire. vous pouvez juste traiter cette mémoire comme un int, et obtenir la valeur qui est stockée là-bas.

Par exemple:

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

Pour plus d'informations, lisez: How are different types stored in memory