【发布时间】:2018-03-04 08:37:17
【问题描述】:
我正在研究凯撒密码,我正在尝试根据字母应该代表的 ascii 将我的密码密钥的字符保存在一个数组中。因此,如果我的密码字符密钥 [] = "codezyxwvutsrqpnmlkjihgfba" 数组 (c) 中的第一个字符应该代表字母 a,其 ascii 编号为 97。所以我想将 c 存储在数组中的第 97 个位置。每次我尝试这样做时,数组都是空的。
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]);
}
【问题讨论】:
-
题目的答案是
a[c]=c; -
通过使用字母的 ASCII 码作为索引,您只为元素 97 到 122 赋值;所有其他元素都为零。因此,您的打印循环不起作用:
answerKey[0]为零。 (循环条件str[i] != '\0'仅对没有嵌入空字符的字符串有用。) -
你应该缩小你的字母,比如
(key[i]-97)%27)。通过这种方式,您可以将其存储在仅包含 27 个字母的数组中!