Во-первых, примечание: ваш первый цикл for должен также включать 'z'.Следовательно:
for (i ='a'; i <= 'z'; i++){
В C массивы не являются отображениями любого значения на любое значение.Они являются просто массивом (или непрерывным списком), начиная с индекса 0. Когда вы говорите,
char vector[52];
означает, что у вас есть массив размером 52. Допустимые индексы для массива - от 0 до 51. Однакокогда вы пишете символ, такой как 'a'
, на самом деле это просто число, которое является кодом ascii символа a
(0x61, то есть 61 hex).Наибольший индекс, который вы используете, равен '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 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
, есливы хотите, чтобы vector['a']
начинался с 0, а не с 1, вам нужно изменить формулу с vector[i] = i - 'a' + 1;
на vector[i] = i - 'a';