Ну, я должен сделать задачу, которая будет сортировать элементы массива уникальным способом.
Так, например, если я введу 1-ю строку:
БОБ, мне нужно сделать: 2 + 15 + 2 (из-за их расположения в алфавите), а затем разделить на количество символов / 3 и сделать это для всех введенных строк, а затем отсортировать их по возрастанию и убыванию. 🙂
У меня вопрос, как мне установить значение 1,2,3,4,5 … для A, B, C, D, E ….. (только большие буквы).
Спасибо.
Если базовая кодировка является последовательной, такой как ascii
,
letter - 'A' + 1
Более надежный и общий подход заключается в изучении char_traits
типа персонажа.
Вам нужно определить функцию
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;
}
Если вы работаете на компьютере 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 )
Чтобы получить значения, вы можете использовать следующий код:
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]);
}
Вам нужно только экранировать строку в массив и перебрать ее …