Odstranění diakritiky
1. OdstraneniDiakritiky
1.2. C#
V hlavní metodě programu OdstraneniDiakritiky je nejprve načten textový řetězec do proměnné vstupniText. Pro odstranění diakritických znamének je použita metoda OdstranitDiakritiku, do níž je předán načtený vstupniText od uživatele. Návrat metody je ve formě textového řetězce, u něhož byla odstraněna všechna diakritická znaménka - viz Kód 1.
static void Main(string[] args) { /* Deklarace: 'vstupniText' ... textový řetězec zadaný uživatelem, u něhož * má být odstraněna diakritika */ string vstupniText; Console.WriteLine("Odstranění diakritiky"); // Výzva pro zadání vstupního textu Console.Write("Zadejte vstupní text: "); // Načtení textového řetězce od uživatele vstupniText = Console.ReadLine(); // Výpis textu spolu s návratem metody, která obsahuje textový řetězec bez diakritiky Console.WriteLine("Výstupní text: " + OdstranitDiakritiku(vstupniText)); // Čekání na stisk klávesy -> ukončení programu Console.ReadKey(); }
Kód 1: Program OdstraneniDiakritiky - deklarace hlavní statické metody Main
Statická metoda s návratem OdstranitDiakritiku využívá dvou deklarovaných konstant ve formě textových řetězců (typu string) - první textový řetězec sDiakritikou obsahuje písmena s diakritikou a druhý textový řetězec bezDiakritiky obsahuje stejná písmena, ale však bez diakritiky - viz Kód 2. V počáteční deklaraci je uveden textový řetězec bezDia, do nějž budou postupně ukládány jednotlivé znaky bez diakritiky. Po počáteční inicializaci tohoto výstupního řetězce prázdným textem je další proměnné s názvem pocetZnaku přiřazen počet znaků v řetězci načteném od uživatele. Pomocí cyklus s krokem budeme procházet jednotlivé znaky řetězce pomocí řídící i proměnné cyklu, jenž reprezentuje pozici znaku. Deklarace proměnné je provedena přímo v cyklu. Podmínka ukončení tohoto cyklu se řídí dosažením horní meze u této řídící proměnné i < pocetZnaku (podmínku jsme oproti kódu i <= pocetZnaku - 1 vygenerovaného z Flowgorithm mírně upravili bez změny své podstaty). V cyklu je testována existence jednotlivých znaků z předaného vstupního řetězce s v textovém řetězci s diakritikou. V analýze jsme využívali vlastní vytvořenou funkci Contains. To však není v C# není nutné. Využijeme metodu s návratem implementovanou ve třídě String, ke které přistoupíme pomocí tečkové notace. Této metodě předáme aktuální procházený znak na i-té pozici, tj. s[i] a otestujeme, zda se tento znak nachází v textovém řetězci s diakritikou - výstup metody Contains bude v tomto případě true. Pokud je podmínka splněna dojde k procházení jednotlivých znaků v řetězci s diakritikou, abychom zjistili na které pozici j se tento znak nachází a mohli jsme ho nahradit znakem na stejné pozici j, ale znakem z textového řetězce bez diakritiky (znaky jsou postupně přidávány do výstupního textového řetězce bezDia pomocí operátoru +=). Pokud aktuální znak nebyl v řetězci s diakritikou nalezen, je do výstupního řetězce připojen aktuální znak ze vstupního řetězce s. Finálním krokem je přiřazení hodnoty uložené ve výstupním řetězci do návratu metody.
// Metoda s návratem textového řetězce bez diakritických znamének static string OdstranitDiakritiku(string s) { // Parametr: 's' ... vstupní řetězec, ve kterém má být odstraněna diakritika; /* Deklarace: 'bezDia' ... výstupní řetězec, tj. vstupní řetězec po odstranění * diakritiky; 'pocetZnaku' ... počet znaků ve vstupním řetězci */ string bezDia; int pocetZnaku; // Deklarace textového řetězce obsahujícího diakritiku včetně inicializace const string sDiakritikou = "ÁáČčĎďÉéĚěÍíŇňÓóŘřŠšŤťúůÚÝýŽž"; // Deklarace textového řetězce neobsahujícího diakritiku včetně inicializace const string bezDiakritiky = "AaCcDdEeEeIiNnooRrSsTtuuUYyZz"; // Vyprázdnění výstupního textového řetězce bezDia = ""; // Počet znaků ve vstupním řetězci pocetZnaku = s.Length; /* Pro každý znak ve vstupním textovém řetězci - 'i' ... pozice znaku ve vstupním textovém řetězci */ for (int i = 0; i < pocetZnaku; i++) { /* Pokud textový řetězec s diakritikou obsahuje znak na 'i'-té pozici ve vstupním * textovém řetězci */ if (sDiakritikou.Contains(s[i]) == true) { /* Pro každý znak v řetězci 'sDiakritikou' - 'j' ... pozice znaku * v řetězci s diakritikou */ for (int j = 0; j <= sDiakritikou.Length - 1; j++) { /* Pokud se znak ve vstupním řetězci na pozici 'i' nachází také v textovém * řetězci 'sDiakritikou' (na pozici 'j'), tj. obsahuje diakritiku ... */ if (s[i] == sDiakritikou[j]) { /* Připoj znak z řetězce 'bezDiakritiky' na stejné pozici 'j', na které * byl vyhledán v řetězci 'sDiakritikou' (prohození znaku s diakritikou * za znak bez diakritiky) */ bezDia += bezDiakritiky[j]; } } } else { // Přidej znak ze vstupního řetězce do výstupního řetězce bezDia += s[i]; } } // Přiřazení návratu metody return bezDia; }
Kód 2: Deklarace statické metody s textovým návratem s názvem OdstranitDiakritiku