Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

9. diel - Textové reťazce v jazyku C ++

V predchádzajúcom cvičení, Riešené úlohy k 8. lekcii C ++, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.

S textovými reťazcami sme sa už v kurze letmo stretli, načítali sme ich a vypisovali pomocou premennej typu string. S reťazci možno v C ++ pracovať niekoľkými spôsobmi. My si v tomto C ++ tutoriálu uvedieme zatiaľ ten najjednoduchší, tzv. Statický reťazec, ktorým je práve typ string.

Knižnica string

Keď budeme chcieť uložiť do premennej textový reťazec "Hello ITnetwork", iba vytvoríme objekt typu string a priradíme mu reťazec. Zatiaľ nás nemusí trápiť, že vlastne nevieme, čo objekt je. Dozviete sa to v sekcii venovanej OOP. Nesmieme zabudnúť includovat hlavičkový súbor string:

Klikni pre editáciu
  • #include <string>
    #include <iostream>
    using namespace std;
    
    int main()
    {
        string pozdrav = "Hello World!";
        cout << pozdrav << endl;
        cin.get();
        return 0;
    }
    
    • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

    Tak ako sme to v C ++ videli už niekoľkokrát, vypísaný text zobrazí na obrazovke a čaká sa na stlačenie klávesu od užívateľa.

    Konzolová aplikácia
    Hello Wordl!

    Práca s jednotlivými znakmi

    S reťazcom môžeme zaobchádzať úplne rovnako ako s poľom, pretože interne poľom je:) Nie je teda problém vypísať napríklad prvý znak alebo znaky meniť. Pri inej manipulácii s reťazcami je lepšie použiť metódy (funkcie), ktoré typ string poskytuje. My si na konci uvedieme tie základné.

    Teraz si poďme ukázať, ako napríklad zmeniť prvý znak a medzi každým písmenom vypísať medzeru:

    Klikni pre editáciu
    • string pozdrav = "Hello World!";
      pozdrav[0] = 'h';
      for (int i = 0; i < 12; i++ )
          cout << pozdrav[i] << ' ';
      cout << endl;
      cin.get();
      
      • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

      výsledok:

      Konzolová aplikácia
      h e l l o   W o r l d !

      Zmenou prvého znaku na 'h' sme zmenšili prvé písmeno textu. Vďaka hranatým okrúhlych zátvoriek sme potom mohli k reťazcu pristúpiť ako k poľu a vypísať jednotlivé znaky oddelené medzerou.

      Čítanie / výpis reťazca

      Reťazce môžeme jednoducho načítavať / vypisovať ako sme boli zvyknutí doteraz, použijeme k tomu objekt cin. Premennú pre reťazec založíme ako typ string.

      Nasledujúci program si nechá zadať vaše meno a potom vás pozdravia:

      Klikni pre editáciu
      • string jmeno;
        cout << "Zadajte Vaše meno: ";
        cin >> jmeno;
        cout << "Zdravim " << jmeno << endl;
        cin.ignore(0xFF,'\n');
        cin.get();
        
        • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

        Výsledok nás možno prekvapí:

        Konzolová aplikácia
        Zadajte Vaše meno: David Capka
        Zdravim David

        Všimnime si, že bolo načítané iba prvé slovo. Pri vstupe pomocou cin sa čítanie ukončí na prvom tzv. Bielom znaku. To sú znaky, ktoré nemožno vytlačiť, ako napr. Medzera, enter alebo tabulátor. Tiež si všimnime riadky cin.ignore(0xFF,'\n'). Tá udáva, že všetok text, ktorý ešte na vstupe čaká, sa má ignorovať, a to až po znak '\n', ktorý označuje enter. Ak by sme túto metódu nezavolali, cin.get() by automaticky prečítal ďalší znak, ktorý by bol vo fronte a program by sa ihneď ukončil.

        Ak by sme chceli prečítať celý riadok, využijeme na to funkcii getline(), ktorá ako prvý parameter prijíma objekt cin a ako druhý reťazec, do ktorého text uloží.

        Klikni pre editáciu
        • string jmeno;
          cout << "Zadajte Vaše meno: ";
          getline(cin, jmeno);
          cout << "Zdravim " << jmeno << endl;
          cin.get();
          
          • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

          Štandardné funkcie pre prácu s reťazcami

          Typ string nám poskytuje mnoho pripravených funkcií pre prácu s reťazcami, ktoré zjednodušia naše programy.

          length() - dĺžka reťazca

          Dĺžku reťazca môžeme zistiť pomocou metódy length() (podrobnejší opis rozdielu medzi metódou a funkciou je opäť súčasťou kurzu OOP).

          Klikni pre editáciu
          • string pozdrav = "Hello World";
            unsigned int delka = pozdrav.length();
            cout << delka;
            
            • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

            clear() - zmazanie reťazca

            Ak chceme uvoľniť miesto, použijeme metódu clear(). Tá zmaže všetok obsah, ktorý je v premennej uložený.

            string pozdrav = "Hello World";
            pozdrav.clear();

            Spojenie reťazcov

            2 textové reťazce môžeme spojiť do jedného pomocou operácie +, ako sme zvyknutí napríklad pri aritmetických operácií.

            Klikni pre editáciu
            • string prvniPozdrav = "Hello ";
              string druhyPozdrav = "World";
              string pozdrav = prvniPozdrav + druhyPozdrav;
              cout << pozdrav;
              
              • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

              find() - vyhľadanie podreťazca

              V texte si môžeme nechať vyhľadať nejaký znak alebo reťazec. C ++ ho od začiatku do konca prehľadá a ak znak alebo reťazec nájde, vráti jeho pozíciu. Ak reťazec znak neobsahuje, vráti metóda hodnotu väčšiu, než je posledný index reťazca.

              Klikni pre editáciu
              • string text = "Wolfgang Amadeus Mozart";
                unsigned int pozice = text.find("Amadeus");
                if (pozice < text.length())
                    cout << "Nájdených na pozíciu " << pozice << endl;
                else
                    cout << "Nenájdené" << endl;
                cin.get();
                
                • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

                Asi vás neprekvapí, že sa pozícia indexuje od nuly.

                Konzolová aplikácia
                Nájdených na pozíciu 9

                Ďalej string poskytuje sadu obdobných metód, iba s inou funkcionalitou:

                • rfind(): nájde posledný výskyt
                • find_first_of(): nájde prvý výskyt ľubovoľného znaku z parametra
                • find_last_of(): nájde posledný výskyt ľubovoľného znaku z parametra
                • substr(): vráti podreťazec, určený začiatkom a dĺžkou

                Nákupný reťazcov

                Porovná 2 reťazca podľa abecedy. Môžeme využiť porovnávací operácie ako väčší (>) a menšie (<).

                Klikni pre editáciu
                • string prvni = "Hello";
                  string druhy = "World";
                  bool porovnani= prvni < druhy;
                  cout << porovnani;
                  
                  • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

                  Metódy pre prácu s reťazcami je oveľa viac. Podrobne sa s nimi zoznámime v jednom z ďalších článkov.

                  Ďalšie interpretácia reťazcov

                  C ++ poskytuje aj podporu pre nízkoúrovňový prístup k reťazcom, teda umožňuje je okrem objektov string definovať i len ako obyčajná polia typu char. Typ string je v C ++ len obal, ktorý vnútorne používa práve tento nízkoúrovňový prístup. Ak budete pracovať s knižnicami pre C alebo ak budete volať systémové volania, budete nútení použiť len polia typu char. Táto interpretácia je používaná v C (pretože C string nemá), a tak vás presmerujem na diel o textových reťazcoch v C. Základný opis môžete nájsť v lekcii Textové reťazca, téma je ďalej rozšírené v lekcii Textové reťazca druhýkrát.

                  Pre dnešok by to bolo všetko.

                  V budúcej lekcii, Textové reťazce v jazyku C ++ druhýkrát - Práca so znakmi , sa budeme venovať ďalej textovým reťazcom a to na niekoľkých praktických programoch.


                   

                  Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

                  Stiahnuť

                  Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

                  Stiahnuté 80x (15.91 kB)
                  Aplikácia je vrátane zdrojových kódov v jazyku C++

                   

                  Ako sa ti páči článok?
                  Pred uložením hodnotenia, popíš prosím autorovi, čo je zleZnakov 0 z 50-500
                  Predchádzajúci článok
                  Riešené úlohy k 8. lekcii C ++
                  Všetky články v sekcii
                  Základné konštrukcie jazyka C ++
                  Preskočiť článok
                  (neodporúčame)
                  Textové reťazce v jazyku C ++ druhýkrát - Práca so znakmi
                  Článok pre vás napísal Patrik Valkovič
                  Avatar
                  Užívateľské hodnotenie:
                  1 hlasov
                  Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
                  Aktivity