Jak v C++ s GLib odstranit diakritiku z textu?
29.12.2018
Jsou situace kdy chceme z textu odstranit diakritiku, samozřejmě nikoliv ve smyslu odebrání/smazání "ne-ansi" znaků, ale nahrazení znaků s diakritikou jejich odpovídajícím "základem".
Jistě by si každý jen trochu zkušený programátor dokázal napsat vlastní algoritmus s využitím pole dvojic znaků, ale zde si ukážeme 2 způsoby s využitím již hotových funkcí v Linuxovém prostředí.
Pokud chceme a můžeme v aplikaci využít knihovnu GLib, je řešení velmi jednoduché. Použijeme funkci g_str_to_ascii a jediné na co nesmíme zapomenout je po použití uvolnit vrácený pointr funkcí g_free, jak je vidět v následujícím výpisu ukázkové aplikace:
#include <stdlib.h> #include <stdio.h> #include <locale.h> #include <glib-2.0/glib.h> #include <string> std::string konverze_na_ascii(const char* text, bool zobraz = true) { if (zobraz) printf("%s\n", (char*)text); gchar* vystup = g_str_to_ascii(text, NULL); if (!vystup) { perror("chyba g_str_to_ascii"); return std::string(""); } if (zobraz) printf("%s\n", (char*)vystup); std::string str_vyst = (char*)vystup; g_free(vystup); return str_vyst; } int main(int argc, char const *argv[]) { std::string str = konverze_na_ascii("Nějaký český text.€.$.@.ěščřžýáíé.#.ĚŠČŘŽÝÁÍÉ"); printf("pro kontrolu: %s", str.c_str()); getchar(); return 0; }
Vzhledem k tomu že využíváme knihovnu GLib, musíme při překladu a sestavení nastavit kompilátoru cestu k hlavičkovým souborům a linkeru pak příslušné knihovny. To můžeme udělat jednoduše použitím pkg-config, takže debug sestavení vytvoříme takto:
g++ maing.cpp -Wall -g -std=c++17 `pkg-config --cflags --libs glib-2.0` -oaplikace
Nové články
Souborové operace na Linuxu v jazyce C
Využívejte Midnight Commander naplno
Procesor a jádra, běh na určeném jádru v C.
picom - kompozitor pro odlehčená Linuxová prostředí
Kontakt
739 219 991
live:radekchalupa_1