[英]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.