#c #string #qt #sorting #sqlite
#c #строка #qt #сортировка #sqlite
Вопрос:
Я работаю над программой (на c), которая требует сортировки. Одним из требований сортировки является сортировка цифр.
Сортировка цифр должна быть завершена от наименее значащей цифры (т. Е. самой правой цифры) до самой значащей цифры (т. Е. самой левой цифры) таким образом, чтобы числа 21, 2 и 11 были отсортированы следующим образом: 2, 11, 21.
Данная строка написана в формате UTF-8 и может содержать специальные символы, цифры, латинские буквы, кириллицу, хирагану / катакану и т.д.
Это дает следующий порядок сортировки :
1
1a
1b
2
11
110
110a
Henry7
Henry24
Комментарии:
1. Прежде чем выполнять какое-либо требование, мы должны его понять. Что означает «Сортировка цифр», когда есть также буквы? Предполагается ли отбрасывать нечисловые символы или что? Вы приводите пример ввода — вам ясно, каков пример вывода? Если да, предоставьте ее нам.
2. leonbloy @ : Да, вы правы. Прежде чем выполнять какое-либо требование, мы должны его понять. Нет, мы не предполагаем отбрасывать нечисловые символы. Приведенные выше строки являются результатом сортировки…. Например, необходим следующий способ сортировки: 1. 7ash 2. 22ash 3. ash4 4. ash22
Ответ №1:
Возможно, вы захотите рассмотреть возможность использования библиотеки ICU (Международные компоненты для Unicode), которая включает в себя API сортировки.
Комментарии:
1. Затем вам придется самостоятельно написать средство сортировки в unicode.org существуют машиночитаемые файлы, которые подскажут вам, в каком порядке сортировать символы. unicode.org/reports/tr10
2. На самом деле QString использует libICU под капотом.
Ответ №2:
Я думаю, вы имеете в виду «сортировать числовые символы в текстовых строках как числа». Вы можете попробовать использовать QString::localeAwareCompare() от Qt, которая использует настройки локали и платформы для сравнения строк. По крайней мере, в OS X это должно означать, что она будет учитывать выбранный пользователем язык, который включает в себя желаемое поведение.
Ответ №3:
Или вы можете преобразовать ее в utf16 и отсортировать по значению кодовой точки, если вас не волнует локаль.
Ответ №4:
Используйте пользовательскую функцию сравнения std::sort, проверив с помощью QString::localeAwareCompare().
Функция сравнения:
void sortLocaleAware(QStringList amp;sList)
{
std::sort(sList.begin(), sList.end(), [](const QString amp;s1, const QString amp;s2){
return s1.localeAwareCompare(s2) < 0;
});
}
Использование:
QStringList myList = { "4a", "3b", "52a" ,"13ş", "34İ" };
sortLocaleAware(myList);