Postava doslovná
Znakový literál je znak v jednoduchých úvodzovkách. Takže,
char ident1 = 'A'; char ident2 = 'b'; char ident3 = '4'; char ident4 = '6';sú rôzne definície znakov. Číslo v jednoduchých úvodzovkách je znak a nie celé číslo.
Úniková sekvencia, ako napríklad \ “(pozri nižšie) v jednoduchých úvodzovkách, je znak. Takže,
char ident1 = '"';je postava.
Jeden symbol v úvodzovkách nie je znak; je to reťazec jedného znaku. „A“ alebo „c“ alebo „2“ teda nie je znak, ale je to reťazec jedného znaku.
Premennú znaku je možné preradiť neskôr v programe takto:
char ident = 'x';ident = 'Y';
Ak chcete zabrániť zmene znaku priradeného k identifikátoru, potom v programe nižšie, pred definíciu zadajte vyhradené slovo, const, takto:
const char ident = 'd';O premennej ident sa hovorí, že je iba na čítanie.
Reťazec doslovný
Reťazcový literál je postupnosť znakov v úvodzovkách. Takže,
char ident1 [] = "Milujem ťa"; char ident2 [] = "Nenávidím 3 z vás"; char ident3 []= "sme svet"; char ident4 [] = "Hello World!";
sú rôzne definície reťazcových literálov. Všimnite si použitie úvodzoviek. Pre reťazec neexistuje nič ako bežná premenná. Reťazcový literál je pole znakov, kde namiesto delenia pomocou je sekvencia oddelená „“. Znaky nie sú oddelené čiarkami. Do hranatých zátvoriek možno umiestniť akékoľvek číslo väčšie ako je počet znakov v reťazcovom literále. Je však lepšie ponechať hranaté zátvorky prázdne.
Jeden znak v úvodzovkách nie je znakom; je to reťazec jedného znaku. „A“ alebo „c“ alebo „2“ teda nie je znak, ale reťazec jedného znaku.
Reťazcová premenná neumožňuje opätovné priradenie úplného literálu, neskôr nadol v programe - pozri nižšie. Jednotlivé znaky však možno znova priradiť - pozri nižšie.
Jednoduchá a dvojitá citácia v znakovej alebo doslovnej podobe
Ak chcete mať ako postavu jeden citát, urobte niečo ako,
char ident = '\' ';Ak chcete mať dvojitú úvodzovku ako znak v reťazci, urobte niečo ako,
char ident [] = "ab" cd ";Spätné lomítko sa používa v únikovej sekvencii, aby sa zabránilo konfliktu s oddeľovačmi. Ak chcete mať dvojitú úvodzovku ako znak, nepotrebujete spätné lomítko: „” je v poriadku. Ak chcete mať v úvodzovke jeden citát, nie je potrebné spätné lomítko: „ab'cd“ je v poriadku.
Pretože spätné lomítko sa používa na útek zo znaku, musí sa pri jeho použití ako znaku alebo v reťazcovom literále uniknúť s opačným lomítkom.
Úniková sekvencia
Úniková sekvencia je jedna z:
\ '"\? \\ \ a \ b \ f \ n \ r> \ t \ vKaždá úniková sekvencia sa zvyčajne píše ako znak v jednoduchých úvodzovkách alebo ako úniková sekvencia v dvojitých úvodzovkách.
- \ ': sa používa ako znak úvodzovky v rámci úvodzoviek.
- \ ”: Používa sa ako znak dvojitej úvodzovky v rámci literálu.
- \? : od ? je vyhradený znak, malo by sa v ňom písať špeciálne znaky.
- \\: spätné lomítko by malo byť ukončené ako znak alebo ako reťazcový literál, aby nemal iný význam.
- \ a: raz zaznie výstražný zvon, ak je použitý ako znak alebo v reťazcovom doslovnom tvare.
- \ b: výsledky ako backspace na displeji v rámci reťazcového literálu, ktorý oddeľuje predchádzajúci znak.
- \ f: spôsobí, že sa ďalšia stránka privedie do tlačiarne, ak sa použije ako znak alebo ako literál.
- \ r: vráti kurzor, kde sa má vytlačiť nasledujúci znak, ale v rámci aktuálneho riadku.
- \ n: vráti kurzor na začiatok nasledujúceho riadku alebo len na ďalší riadok, v závislosti od operačného systému.
- \ t: vytvorí vodorovnú kartu.
- \ v: vytvorí zvislú kartu.
Operácie so znakmi
Zreťazenie
V definícii môžu byť dva reťazcové literály spojené s medzerou takto:
char ident [] = "abc" "def";cout << ident << "\n";
Výstup je: abcdef . Túto definíciu je možné rozšíriť na viac ako dva literály. Poznámka: vyhlásenie je definíciou, nielen zadaním. Definícia môže dokonca pokračovať na ďalší riadok s medzerou, ktorá riadky oddeľuje takto:
char ident [] = "abc" "def"„ghi“;
cout << ident << "\n";
Výstupom je abcdefghi.
Poznámka: Znaky nemožno spájať týmto spôsobom, pretože jednoduché úvodzovky pre znak nemôžu mať viac ako jeden symbol.
Prevádzkovatelia rovnosti
Rovnaké znaky v rovnakom prípade sú rovnaké. Nie sú si rovní, ak sa nejedná o ten istý prípad. Zvážte,
bool result = 'B' == 'B';cout << result << "\n";
== znamená rovná sa, zatiaľ čo = znamená priradená a nerovná sa. Výstup je 1 pre true. Zvážte,
bool result = 'B' == 'b';cout << result << "\n";
Výstup je 0 pre false. Zvážte,
bool result = 'b' == 'c';cout << result << "\n";
Výstup je 0 pre false. Zvážte,
bool result = 'B' != 'B';cout << result << "\n";
!= znamená nerovný, zatiaľ čo = znamená priradený a nerovný. Výstup je 0 pre false. Zvážte,
bool result = 'B' != 'b';cout << result << "\n";
Výstup je 1 pre true. Zvážte,
bool result = 'b' != 'c';cout << result << "\n";
Výstup je 1 pre true.
Takže == a != sú operátormi rovnosti.
Relační operátori
V prípade bežných znakov v jazyku C ++ sú vzostupne číslice pred veľkými písmenami, ktoré sú pred malými písmenami.
Takže < will return true (1) when the left character is less than the right character. The other relational operators, <=, >, > = sú vysvetlené podobne.
Reťazec doslovný ako objekt
Pole je konštantným smerníkom na začiatok konkrétnej postupnosti dátových typov. Podobne je reťazec konštantným ukazovateľom na začiatok sekvencie znakov. Porovnajte nasledujúce definície:
int arr [] = 3, 4, 5, 6, 7;char str [] = 'w', 'o', 'm', 'a', 'n';
char stri [] = "žena";
Prvé pole je pole ints a má päť prvkov. Druhé a tretie pole sú polia znakov s rôznymi názvami, ale rovnakým počtom prvkov. Druhé a tretie pole sú rovnaké, ale pre ich mená. Textový obsah druhého poľa je ohraničený zloženými zátvorkami; znaky sú oddelené čiarkami a každý znak je v jednoduchých úvodzovkách. Textový obsah tretieho poľa je ohraničený dvojitými úvodzovkami; znaky nie sú oddelené čiarkami a každý znak nie je v jednoduchých úvodzovkách. Druhé a tretie pole sú dva spôsoby výroby reťazca, pričom tretí spôsob je lepší spôsob.
arr je konštantný ukazovateľ na prvý prvok jeho poľa, čo znamená, že arr bude vždy smerovať na miesto s celým číslom, 3 aj keď sa hodnota 3 zmení. Veľkosť poľa, päť prvkov, v skutočnosti nezostáva konštantná. Každú z hodnôt poľa je však možné zmeniť.
str je konštantný ukazovateľ na prvý prvok jeho poľa, čo znamená, že str bude vždy smerovať na miesto so znakom „w“, aj keď sa hodnota „w“ zmení. Veľkosť znakového poľa, päť prvkov, v skutočnosti nezostáva konštantná. Každú z hodnôt literálu je však možné zmeniť.
stri je konštantný ukazovateľ na prvý prvok jeho literálu (pole), čo znamená, že stri bude vždy smerovať na miesto, ktoré má znak, w aj keď sa hodnota w zmení. Veľkosť reťazcového literálu (poľa), päť prvkov, v skutočnosti nezostáva konštantná. Každú z hodnôt literálu je však možné upraviť.
Čo je konštantné v poli alebo reťazci? Pamäťová adresa prvého prvku poľa alebo literálu zostáva ako hodnota názvu (identifikátora) poľa alebo literálu a nemožno ju zmeniť. Veľkosť poľa alebo literálu v skutočnosti nezostáva konštantná. Každú hodnotu v poli alebo literáli je možné zmeniť. Nasledujúci kód ukazuje, ako sa zmenil štvrtý prvok každého z polí:
int arr [] = 3, 4, 5, 6, 7;char str [] = 'w', 'o', 'm', 'a', 'n';
char stri [] = "žena";
arr [3] = 9;
str [3] = 'e';
stri [3] = 'e';
cout << arr[3] << '\n';
cout << str << '\n';
cout << stri << '\n';
Výstup je:
9zeny
ženy
Upozorňujeme, že k prvkom definovaného reťazcového literálu, podobne ako v prípade tretej definície vyššie, je možné získať prístup k indexu poľa (dolný index). Dôvod druhého riadku výstupu je uvedený nižšie.
Definičný dolný index
Všimnite si, že vo vyššie uvedených definíciách nie je pre dolný index žiadne celé číslo. Ak programátor nedokáže ľahko určiť počet prvkov, celé číslo dolného indexu by malo byť vynechané. V každom prípade by celé číslo nemalo byť menšie ako počet prvkov v poli.
V prípade reťazcového literálu by celé číslo malo byť minimálne o 1 vyššie ako počet znakov v reťazci. Je to preto, že nulový znak (\ 0) vždy pridá kompilátor na koniec poľa, ktoré je reťazcom, oddelené dvojitými úvodzovkami. Znak null sa nepridáva na koniec druhého poľa vyššie, pretože nejde o oficiálny reťazec. Tretie pole je oficiálny reťazec. Nasledujúci kód zobrazuje minimálne hodnoty dolného indexu.
int arr [5] = 3, 4, 5, 6, 7;char str [5] = 'w', 'o', 'm', 'a', 'n';
char stri [6] = "žena";
Aby sa druhá definícia stala oficiálnym reťazcom, je potrebné pridať nulový znak nasledovne:
int arr [5] = 3, 4, 5, 6, 7;char str [6] = 'w', 'o', 'm', 'a', 'n', '\ 0';
char stri [6] = "žena";
Výstup by teraz mal byť,
9ženy
ženy
bez druhých „žien“. Upozorňujeme, že zodpovedajúci dolný index pre druhé pole je 6, a nie 5, ako bol.
Stále literárne hodnoty
Ak chcete zabrániť zmene ľubovoľného znaku v úvodzovkách priradených k identifikátoru, neskôr v programe, pred definíciu zadajte vyhradené slovo, const, takto:
const char ident [] = "Milujem ťa";Prevádzka s textom strún
Operácie rovnosti
Operátory rovnosti sú == a != . Pri porovnávaní premenných (identifikátorov) dvoch reťazcov sa porovnávajú ukazovatele (adresy) literálov; to je zle. Na porovnanie reťazcov je potrebné porovnať literály, ako v nasledujúcom kóde:
bool result = "žena" == "žena";cout << result << '\n';
Výstup je 1 pre true. Porovnanie sa vykonáva spôsobom slovníka, ale s číslami na prvom mieste vo vzostupnom poradí, pred veľkými písmenami, ktoré nasledujú pred malými písmenami. Výstup nasledujúceho kódu je 0, pre hodnotu false.
bool result = "zena" != "žena";cout << result << '\n';
Relačné operátory s reťazcovými literálmi
Relačné operátory nepracujú s reťazcovými literálmi.
Surový reťazec doslovný
Surový reťazcový literál umožňuje zobraziť reťazec ako napísaný, ignoruje únikové sekvencie a rešpektuje nové riadky. Zvážte nasledujúci kód:
char str [] = R "(abc \\ d efg hijklmn \ n "'opq
rst) ";
cout << str << '\n';
Výstup je:
abc \\ d efg hijklmn \ n "'opq
prvý
V kóde sa pôvodný reťazcový literál začína písmenom R, za ktorým nasleduje znak „a ( . Končí to) a „.
C ++ hlavné reťazcové literálne typy
char
Typ char je pôvodný typ C ++ a zvyčajne by ukladal znak do 8 bitov.
char16_t
Toto uloží znak do 16 bitov.
char32_t
Toto uloží znak do 32 bitov.
wchar_t
char16_t a char32_t sú široké znaky. wchar_t je široký znak, ktorý je patentovaný a je definovaný implementáciou.
Záver
Znakový literál je jeden znak v jednoduchých úvodzovkách. Úniková sekvencia je znak, ktorý môže byť tiež v jednoduchých úvodzovkách. Reťazcový literál je postupnosť znakov v úvodzovkách. Reťazcový literál je pole znakov, ktoré končí \ 0. Rovnosť a relačné operátory pracujú s znakovými literálmi. Operátory rovnosti pracujú s reťazcovými literálmi, ale relačné operátory nepracujú s reťazcovými literálmi. Pri porovnávaní je možné použiť identifikátory znakov, ale pri porovnávaní by sa nemali používať identifikátory reťazcov. Surový reťazcový literál umožňuje zobraziť reťazec ako napísaný, pričom ignoruje únikové sekvencie a rešpektuje nové riadky.
Chrys