Datový typ “string”
C++ 11

image_printTisk

V tomto článku si představíme skupinu datových typů knihovny STL pro práci s texty. Seznámíme se s jejich inicializací, stejně tak si popíšeme další základní metody pro práci s touto skupinou datových typů.

Výklad látky o textech musíme začít trochu vhledem do historie. V dobách operačního systému DOS a prvních verzí Windows byla definována norma pro kódování textů jménem ASCII. Vzhledem k tomu, že velikost datového typu pro jeden znak by jeden byte. Nebylo možné, aby norma ASCII postihla potřeby zakódování znaků s diakritikou pro další jazyky než angličtina, na tož tak jazyků jako japonština či čínština. Tento problém byl řešen tvorbou tzv. kódových stránek pro různé jazyky. Bohužel takových standardů vzniklo mnoho, jen pro kódování češtiny existovali nejméně tři normy, proto nastavování příslušné kódové stránky pro určitý program byla v této době noční můra inženýrů IT.

Teprve nástupem normy Unicode pro kódování znaků se stává tento problém vyřešený, neboť tato norma v sobě integruje různá písmena všech jazyků světa, a to i v případě jazyků jako čínština či japonština. Norma Unicode má různé také různé normy kódování jako UTF-8, UTF-16 nebo UTF-32. Bližší informace pro tuto problematiku lze nalézt v tomto článku o Unicode.

Norma knihovny STL jazyka C++ definuje čtyři datové typy pro práci s texty. Jsou to string, wstring, u16string a u32string. Datový typ string je primárně určen pro uchovávání programových textů jako třeba popisy chybových stavů a datový typ wstring je určen pro práci s většími znaky právě kódování Unicode. U datových typů string a wstring C++ standard nedefinuje, jaký typ kódovaní mají používat, je to závislé na konkrétní implementaci překladače a operačním systému. Většina platforem běžících na PC ale i u datového typu string podporuje kódování UTF-8, takže lze používat znaky s českou diakritikou i v tomto datovém typu, i když použití wstring je jistější. Pokud máme požadavek na to uchovávat texty ve formátu UTF-16 nebo UTF-32, máme k dispozici právě datové typy u16string, resp. u32string.

Nyní ale přistupme k vlastnímu výkladu látky pro práci s texty v C++. První si ukážeme, jak datový typ string inicializovat, tedy přiřadit mu nějakou hodnotu. Nabízí se hned několik možností, jak ukazuje následující příklad.

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s1("Ahoj");
    string s2 = "světe";
    string s3 = "!!!!";
    string s4;
    s4 = s3;
    
    cout << s1 << ", " << s2 << s4 << endl;
    return 0;
}
Unable to connect to the JDoodle service.

Pro práci s texty pomocí knihovny STL musíme napřed vložit do modulu hlavičkový soubor <string> pomocí direktivy #include. Nyní přejděme k popisu různých metod, jak jsou inicializovány jednotlivé proměnné typu string. Text do proměnné lze přiřadit buď jeho uvedením v závorkách, jako je to v případě proměnné s1, nebo lze v deklaraci proměnné uvést text pomocí operátoru přiřazení, jako je to v případě proměnných s2 a s3. Nakonec v případě proměnné s4 je její hodnota přiřazena až po její deklaraci, a to z proměnné s3. Nakonec jsou proměnné vypsány na textovou konzoli utvářející všem asi velmi známý pozdrav.

Předchozí příklad bychom mohli modifikovat tak, že nebudeme třeba vypisovat pozdrav na výstup pomocí řetězení operátoru <<, ale že spojíme jednotlivé texty do jednoho datového typu, který pak zobrazíme. Intuitivně můžeme hádat, že se k této operaci používá operátor +. Viz následující příklad.

#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

int main() {
    string s1(&quot;Ahoj&quot;);
    string s2 = &quot;světe&quot;;
    string s3 = &quot;!!!!&quot;;
    string s4;
    s4 = s3;
    
    string pozdrav = s1 + &quot;, &quot; + s2;
    pozdrav += s4;
    
    cout &lt;&lt; pozdrav &lt;&lt; endl;
    return 0;
}
Unable to connect to the JDoodle service.

Vše by asi mělo být jasné, až na záhadný operátor +=. Tento operátor připojuje nějaký text na konec proměnné, která stojí nalevo od něj. Je to v podstatě “zkratka” zápisu “pozdrav = pozdrav + s4”. Více informací o těchto operátorech lze najít v článku Aritmetické operátory.

 

image_printTisk
Datový typ “string”
C++ 11
Ohodnoťte tento článek

Související články

  • Číselné datové typy V této kapitole se objasníme pojem, co je to datový typ. Dále si ukážeme základní číselné datové typy, se kterými jazyk C++ operuje a předvedeme si různé varianty zápisu čísel, hlavně […]
  • Aritmetické operátory Tento článek by měl čtenáři nastínit používání základních aritmetických operátorů v jazyce C++. Je dobré upozornit, že C++ disponuje širší sadou operátorů, než se třeba pojednává ve […]
  • Logické operátory Tématem tohoto článku jsou logické operátory, které slouží ke skládání jednoduchých výrazů, i jejich složitějších variant, s aplikovaným relačním operátorem do logických podmínek. Budeme […]
  • Proměnné V minulém článku jsme si řekli, že data programu jsou uchována v různých souvislých úsecích paměti. Abychom mohli v programu používat hodnotu uloženou v nějakém takovém úseku paměti, […]
  • Relační operátory Tento článek pojednává o porovnávacích, jinak nazývané také relačních,  operátorech v jazyce C++. Souhrnně se o nich zmíníme, ukážeme si opět rozdíl jejich zápisu od klasické matematiky a […]
  • Vstup a výstup pomocí textové konzole V tomto článku se velmi podrobně seznámíme se vstupem a výstupem na textovou konzoli. Začneme popisem jednoduchého vstupu a výstupu a pak dále navážeme, jak se pomocí speciálních příkazů, […]