Programujeme v jazyku C# - Diel 18. - Strings III.

Michal Čižmár  /  23. 03. 2005, 00:00

Ako vidíte, Stringy majú v jazyku C# toľko možností, že je stále o čom písať. Odporúčam čítať všetkým, ktorí o C# pochybovali a stále ešte neobjavili jeho potenciál. Hlavne oproti C++ máme k dispozície veľa pripravených funkcií, čiže nemusíme dlho rozmýšľať ako čo naprogramovať, ale stačí si len vybrať...

>>Jeden typ porovnania nestačí!
Minule sme si ukázali ako porovnať dva Stringy, ale s malou poznámkou, že výsledok porovnania je pravda (true) vtedy a len vtedy :-) keď sa zhodujú znak po znaku. S týmto by sme ale dlho nevystačili.

Hlavne ak program očakáva vstup od užívateľa a potom sa má na základe neho riadiť ďalšia činnosť, treba ošetriť, že užívateľ je dostatočne kreatívny :-) a vymyslí veľa formátov ako sa dá tá istá vec rôzne napísať.

Najčastejšie treba ošetriť to, že sa vstup rozlišuje v rámci veľkých a malých písmen.
Ukážeme si to radšej priamo na príklade.

Príklad 18.1

//---------------------------------------------------------
using
System;
class
MainClass
{
    public static void Main()
    {
        string text1 = "pocitac";
        string text2 = "POCITAC";
        string text3 = "P o c i t a c";
        int zhodne;
        bool IgnoreCase = true;

        zhodne = String.Compare(text1,text2);
        Console.WriteLine(zhodne); //-1 Rozdielne
        zhodne = String.Compare(text1,text2,IgnoreCase);
        Console.WriteLine(zhodne); // 0 Zhodne
        zhodne = String.Compare(text1,text3);
        Console.WriteLine(zhodne); // 1 Taktiez rozdielne 
    }
}

//---------------------------------------------------------

Príklad na stiahnutie:
 wwww.inet.sk/download/user/Priklad18.1_MoznostiPorovnania.zip

V príklade, v minulom článku sme na porovnanie použili jednoducho ==. Ak ale chceme brať do úvahy aj veľkosť písmen môžeme použiť funkciu String.Compare().
Prvé dva parametre sú reťazce, ktoré chceme porovnávať a tretím nepovinným je logická premenná (true/false). Myslím, že toto je jasné hneď z príkladu hore.

Upozorňujem na to, že ak reťazce nie sú zhodné, môže byť výsledkom +1 alebo -1. V dokumentácií k C# sa môžete dočítať, že napr. ak prvý reťazec je „menší“ ako druhý, funkcia String.Comapre(). vráti záporné číslo. Menší alebo väčší neznamená však kratší alebo dlhší reťazec! Tu sa do podrobností neoplatí ísť, stačí len keď pochopíte ten rozdiel.

>>Nahrádzanie znakov a reťazcov.

Nemusíme vymýšľať jeden algoritmus ako vyhľadať zadaný znak alebo subreťazec a druhý algoritmus na prevedenie zámeny. Stačí len použiť funkciu Replace(). Pozrite príklad:

Príklad 18.2

//---------------------------------------------------------
using
System;
class
MainClass
{
     public static void Main()
    {
          string domace = "macka";
          string hydina = domace.Replace('m','k');
         Console.WriteLine("Ine zvieratko :{0}",hydina);

         string text = "Kazdy druhy Slovak sa ma dobre";
         text = text.Replace("druhy","piaty"); // :-)
        Console.WriteLine("Sprava : {0}",text);

        string text2= " Doly mala malu ovecku";
        text2 = text2.Replace(" ","_medzera_");
        Console.WriteLine("Bez medzier : {0}",text2);
    }
}

//---------------------------------------------------------

Príklad na stiahnutie: www.ient.sk/download/user/Priklad18.2_Nahradzanie.zip

Myslím si, že je to veľmi užitočná funkcia. Vidíte, že môžete zamieňať buď len konkrétne znaky, alebo celé reťazce. Ak potrebujete nahradiť znaky reťazcami, tak stačí použiť malú fintu a to, že znak zadáte ako reťazec (tým, že ho dáte do úvodzoviek, namiesto apostrofov.)

>>Ako si vybrať len časť reťazca?

Myslím, že stačí len príklad:

Príklad 18.3

//---------------------------------------------------------
using
System;
class
MainClass
{
      public static void Main()
     {
           string text1 = "Programujeme v jazyku C#";
           string temp;
           for(int i = 0; i < text1.Length-4;i++)
          {
                temp = text1.Substring(i,5);
                Console.WriteLine(temp);
          }
     }
}

//---------------------------------------------------------
Príklad na stiahnutie: www.inet.sk/download/user/Priklad18.3_Podretazec.zip


>>Čo bude nabudúce?

Nabudúce to bude posledný článok o reťazcoch. Ostalo nám ešte si niečo povedať o “príbuznom“ Stringov a to o triede StringBuilder. Tak .skisto sme nespomenuli formátované vytváranie reťazcov. Niečo ako v jazyku C robila funkcia sprintf().

>>Predchádzajúce články
Programujeme v jazyku C# - Diel 17. - Strings II.
Programujeme v jazyku C# - Diel 16. - Strings I.
Programujeme v jazyku C# - Diel 15. - MIX zaujímavostí III.
Programujeme v jazyku C# - Diel 14. - MIX zaujímavostí II. 
Programujeme v jazyku C# - Diel 13. - MIX zaujímavostí I. 

>>Kde písať pripomienky a otázky?

Buď do diskusie alebo najlepšie priamo na môj e-mail uvedený úplne na konci článku.


Michal Čižmár

MiCitn@orangemail.sk




Neprehliadnite: