Общий обзор:
У меня есть список имен, каждое имя - string&
. Обычное действие, которое нужно выполнить со списком строк, - это сортировка строк в алфавитном порядке.
Один из способов сделать это состоит в том, чтобы преобразовать обе строки в один и тот же регистр, начать с первого символа в каждой строке и оценить символы, чтобы увидеть, что идет первым в алфавите вдоль строк if (char1 > char2)
, повторяя до тех пор, пока два сравниваемых символа не равны или не достигают последнего символа в более короткой строке.
Символы эмодзи всегда оцениваются в ... интересные ... char
значения, которые при использовании алгоритма сортировки, подобного описанному выше, символы смайликов всегда сортируются так, чтобы они приходили перед буквенно-цифровые символы.
Цель: Произвольная сортировка строк эмодзи или строк, которые просто начинаются с эмодзи, до или после чисто буквенно-цифровых строк. Я хотел бы иметь возможность контролировать, где в алфавитном порядке сортируются символы / строки эмодзи: выбор после 'Z' / 'z' или перед 'A' / 'a'.
(Я не говорю, что хотел бы контролировать, где они отсортированы, до точки размещения их между другими произвольными символами, такими как 'p' и 'q', и я не говорю, что моя цель - контролировать, как смайлики упорядочены по сравнению с другими смайликами, просто для ясности.)
Код для демонстрации:
bool compareStringsIgnoreCase(std::string& str1, std::string& str2)
{
int i = 0;
while (i < str1.length() && i < str2.length())
{
char firstChar = tolower(first[i]);
char secondChar = tolower(second[i]);
int firstCharAsInt = firstChar;
int secondCharAsInt = secondChar;
if (firstCharAsInt < secondCharAsInt)
return true;
else if (firstCharAsInt > secondCharAsInt)
return false;
i++;
}
return (str1.length() < str2.length());
}
При использовании str1 = "Abc"
и str2 = ?
, когда
i = 0
, остальные значения следующие:
firstChar = 'a'
secondChar = '\xf0'
firstCharAsInt = 97
secondCharAsInt = -16
С этими значениями имеет смысл, что firstCharAsInt > secondCharAsInt
, и поэтому функция возвращает true
, и строка emoji сортируется так, чтобы быть перед строкой "Abc". Опять же, я бы хотел иметь возможность сортировать смайлики по буквенно-цифровым символам - вопрос в том, как?
Я опробовал несколько смайликов, и их значения "char как int" всегда отрицательны. Отличаются ли эмоджи от других char
в этом смысле? Если так, то это может быть простой и легкой проверкой, которая может идентифицировать их, чтобы разместить их после других символов. Открыт и для других подходов.
Спасибо