Diskuze: Řadicí funkce pro češtinu
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 2 zpráv z 2.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Základem všeho je funkce pro třídění české abecedy a nastavení locale. Pak můžeš aplikovat qsort() na celý vektor/pole.
#include <iostream>
#include <locale>
#include <vector>
int compare_czech(const void* a, const void* b) {
setlocale(LC_COLLATE, "cs_CZ.utf8");
const std::string& aa = *(const std::string*)a;
const std::string& bb = *(const std::string*)b;
const wchar_t* wa = (const wchar_t*)malloc(sizeof(wchar_t) * (aa.size() + 1));
const wchar_t* wb = (const wchar_t*)malloc(sizeof(wchar_t) * (bb.size() + 1));
mbstowcs((wchar_t*)wa, aa.c_str(), aa.size() + 1);
mbstowcs((wchar_t*)wb, bb.c_str(), bb.size() + 1);
int result = wcscoll(wa, wb);
free((void*)wa);
free((void*)wb);
return result;
}
int main() {
std::vector<std::string> foods = { "čokoláda", "hříbek", "špagety", "čína", "cibule", "česnek", "šunka", "klobása", "chleba", "koláč" };
setlocale(LC_ALL, "");
std::qsort(&foods[0], foods.size(), sizeof(std::string), compare_czech);
for (const auto& food : foods) {
std::cout << food << '\n';
}
return 0;
}
Zobrazeno 2 zpráv z 2.