C++ 在C中使用字符作为数组索引?
我有以下代码:C++ 在C中使用字符作为数组索引?,c++,c,arrays,vector,C++,C,Arrays,Vector,我有以下代码: int main(){ char vector[52]; char i; /* initialize the vector */ for (i ='a'; i < 'z'; i++){ vector[i] = i - 'a' + 1; } // vector is like vector['a'] = 1, vector['b'] = 2 .. vector['z'] = 26 for (i ='A'; i <= 'Z';
int main(){
char vector[52];
char i;
/* initialize the vector */
for (i ='a'; i < 'z'; i++){
vector[i] = i - 'a' + 1;
}
// vector is like vector['a'] = 1, vector['b'] = 2 .. vector['z'] = 26
for (i ='A'; i <= 'Z'; i++){
vector[i] = i - 'A' + 27;
}
// vector is like vector['A'] = 27, vector['B'] = 28 .. vector['z'] = 52
for (i ='a'; i <= 'z'; i++){
printf("letter %c : %d \n", i, vector[i]);
}
for (i ='A'; i <= 'Z'; i++){
printf("letter %c : %d \n", i, vector[i]);
}
return 0;
}
我不明白为什么要发出这个错误消息。
我应该有这样一个向量:
vector['a'] = 0, vector['b'] = 1, .., vector['z'] = 26, vector['A'] = 27, vector['B'] = 28, .., vector['Z'] = 52
我知道我有这个向量,但错误也随之而来。
如何解决这个问题?因为“Z”不等于“Z” “Z”等于90,向量只有52个元素。你的最高指数是51,所以你基本上是出界了 例如,当你这样做的时候
for (i ='A'; i <= 'Z'; i++)
{
vector[i] = i - 'A' + 27;
}
for(i='A';ifor(i='A';i
因此,vector
的可访问索引是0到51-
for (i ='A'; i <= 'Z'; i++) // 'A' = 65 and 'Z' = 90
{
printf("letter %c : %d \n", i, vector[i]);
}
(i='A';i的
(虽然我不太确定“something”可能是什么。)首先,一个旁注:您的第一个for循环还需要包括“z”。因此:
for (i ='a'; i <= 'z'; i++){
意味着您有一个大小为52的数组。数组的有效索引为0到51。但是,当您编写一个类似'a'
的字符时,它实际上只是一个数字,它是字符a
的ascii码(即0x61,即61十六进制)。您使用的最高索引是'z'
,它是122。因此,您的数组需要索引122有效,因此必须具有至少123的大小
因此,您的代码如下所示:
int main(){
char vector[123];
char i;
/* initialize the vector */
for (i ='a'; i <= 'z'; i++){
vector[i] = i - 'a' + 1;
}
// vector is like vector['a'] = 1, vector['b'] = 2 .. vector['z'] = 26
for (i ='A'; i <= 'Z'; i++){
vector[i] = i - 'A' + 27;
}
// vector is like vector['A'] = 27, vector['B'] = 28 .. vector['z'] = 52
for (i ='a'; i <= 'z'; i++){
printf("letter %c : %d \n", i, vector[i]);
}
for (i ='A'; i <= 'Z'; i++){
printf("letter %c : %d \n", i, vector[i]);
}
return 0;
}
然后你说:
我应该有这样一个向量:
vector['a'] = 0, vector['b'] = 1, .., vector['z'] = 26, vector['A'] = 27, vector['B'] = 28, .., vector['Z'] = 52
如果你想让向量['a']
从0开始,而不是从1开始,你应该把你的公式从向量[i]=i-'a'+1;
改为向量[i]=i-'a';
改为字符向量[53];
。你越界了。你到底想干什么?!向量['a']
已经超出了大小为52的数组的范围。a
的ASCII值是多少?您可能想熟悉ASCII值。它不是指“ASCII值”。它是指平台编码中“a”的任何数值。很抱歉,我的矛盾,我的意思是:向量类似于向量['a']=1,向量['b']=2..vector['z']=26,而不是第二种情况
for (i ='A'; i <= 'Z'; i++) // 'A' = 65 and 'Z' = 90
{
printf("letter %c : %d \n", i, vector[i]);
}
char vector[52];
for (i ='a'; i < 'z'; i++){
vector[i] = i - 'a' + 1;
}
vector[i-'a] = something;
for (i ='a'; i <= 'z'; i++){
char vector[52];
int main(){
char vector[123];
char i;
/* initialize the vector */
for (i ='a'; i <= 'z'; i++){
vector[i] = i - 'a' + 1;
}
// vector is like vector['a'] = 1, vector['b'] = 2 .. vector['z'] = 26
for (i ='A'; i <= 'Z'; i++){
vector[i] = i - 'A' + 27;
}
// vector is like vector['A'] = 27, vector['B'] = 28 .. vector['z'] = 52
for (i ='a'; i <= 'z'; i++){
printf("letter %c : %d \n", i, vector[i]);
}
for (i ='A'; i <= 'Z'; i++){
printf("letter %c : %d \n", i, vector[i]);
}
return 0;
}
// vector is like vector['a'] = 1, vector['b'] = 2 .. vector['z'] = 26
vector['a'] = 0, vector['b'] = 1, .., vector['z'] = 26, vector['A'] = 27, vector['B'] = 28, .., vector['Z'] = 52