массивы — Как установить значение буквы алфавита? Переполнение стека

Ну, я должен сделать задачу, которая будет сортировать элементы массива уникальным способом.

Так, например, если я введу 1-ю строку:
БОБ, мне нужно сделать: 2 + 15 + 2 (из-за их расположения в алфавите), а затем разделить на количество символов / 3 и сделать это для всех введенных строк, а затем отсортировать их по возрастанию и убыванию. 🙂

У меня вопрос, как мне установить значение 1,2,3,4,5 … для A, B, C, D, E ….. (только большие буквы).

Спасибо.

-1

Решение

Если базовая кодировка является последовательной, такой как ascii,

letter - 'A' + 1

Более надежный и общий подход заключается в изучении char_traits типа персонажа.

2

Другие решения

Вам нужно определить функцию

int weight(const std::string& s);

Затем выполните итерацию строки char по char и выполните следующее:

w = ch - 'A' + 1

Вы также можете проверить, что символ находится перед ‘A’ и ‘Z’ или предположить, что.

Вы должны прочитать больше о ASCII

РЕДАКТИРОВАТЬ:
Код весовой функции (упрощенно):

int weight(const std::string& s) {
int sum = 0, i = 0;
for(i = 0; i < s.size(); i++) {
char ch = s[i];
sum += ch - 'A' + 1;
}
return sum/i;
}
2

Если вы работаете на компьютере ASCII, ответ @ StoryTeller работает. В противном случае вы можете создать массив для сопоставления между ними:

const char letters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
static const int numbers [ 256 ] = { 0 };

for ( size_t index = 0; index < sizeof letters; ++index ) {
numbers [ letters [ index ] ] = index + 1;
}

assert ( numbers [ 'A' ] == 1 )
assert ( numbers [ 'Z' ] == 26 )
1

Чтобы получить значения, вы можете использовать следующий код:

int getValue(char which)
{
int ret = 0;
switch(which)
{
case 'a' : ret = 1 ; break;
case 'A' : ret = 27 ; break;
case 'b' : ret = 2 ; break;
case 'B' : ret = 28 ; break;
// and so on....
}
return ret;
}
int result = 0;
while(....)
{
result = result + getValue(myarray[counter]);
}

Вам нужно только экранировать строку в массив и перебрать ее …

0