C ++

Ako používať textový reťazec C ++

Ako používať textový reťazec C ++
Na klávesnici počítača sú vytlačené znaky. Po stlačení klávesu sa na obrazovke zobrazí znak. Poznámka: medzera je tiež znak. Reťazcový literál je postupnosť znakov. Tento článok vysvetľuje, ako používať reťazcové literály C ++. Aby ste porozumeli tomuto článku, mali by ste vedieť o poliach a ukazovateľoch v C ++.

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 \ v

Každá úniková sekvencia sa zvyčajne píše ako znak v jednoduchých úvodzovkách alebo ako úniková sekvencia v dvojitých úvodzovkách.

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:

9
zeny
ž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 hij
klmn \ n "'opq
rst) ";
cout << str << '\n';

Výstup je:

abc \\ d efg hij
klmn \ 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

Trackpad a ukazovateľ myši AppyMouse na obrazovke pre tablety so systémom Windows
Používateľom tabletov často chýba ukazovateľ myši, najmä keď notebooky bežne používajú. Dotykové smartphony a tablety majú veľa výhod a jediným obmedz...
Stredné tlačidlo myši nefunguje v systéme Windows 10
The stredné tlačidlo myši pomáha vám prechádzať dlhé webové stránky a obrazovky s množstvom údajov. Ak sa to zastaví, budete nakoniec používať klávesn...
Ako zmeniť ľavé a pravé tlačidlo myši na počítači so systémom Windows 10
Je úplnou normou, že všetky zariadenia počítačových myší sú ergonomicky navrhnuté pre pravákov. Existujú však dostupné myšacie zariadenia, ktoré sú šp...