繁体   English   中英

如何将char保存到数组中ascii num的位置

[英]How to save a char to an array in the position of its ascii num In c

我正在研究Caesar密码,并且正在尝试将我的密码密钥的字符保存在基于字母所代表的字母的数组中。 因此,如果我的密码char key [] =“ codezyxwvutsrqpnmlkjihgfba”数组(c)中的第一个字符应该表示字母a,其ascii num为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]);
} 

由于假设只使用小写字母,应答键数组的值仅在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]);
} 

您将从第一个元素开始打印answerKey[]数组,并告诉它在达到'\\0'立即停止。 我不认为answerKey[0]永远不应该为'\\0'因为所有可打印的ascii字符都不为0。我希望您的answerKey[]数组为空,除了元素97-122之间,因此,如果密码会仅用于小写字母字符,也许只在数组的该部分中查找。

另外,您可以通过在放置元素地址时从元素地址中减去'a' ,使answerKey[]数组仅容纳足够的空间以适合密码。 这样的事情可能会解决问题:

char answerKey[27] = "";

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

在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

有关更多信息,请阅读: 内存中如何存储不同类型的数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM