Jak používat řetězec C ++ doslovně

How Use C String Literal



Na klávesnici počítače jsou vytištěny znaky. Když stisknete klávesu, uvidíte znak na obrazovce. Poznámka: prostor je také znak. Řetězcový literál je posloupnost znaků. Tento článek vysvětluje, jak používat řetězcové literály C ++. Abyste porozuměli tomuto článku, měli byste vědět o polích a ukazatelích C ++.

Doslovný charakter

Doslovný znak je znak v jednoduchých uvozovkách. Tak,







charident1= 'NA'; charident2= 'b'; charident3= '4'; charident4= '6';

jsou všechny různé definice znaků. Všimněte si, že číslice v jednoduchých uvozovkách je znak a ne celé číslo.



Úniková sekvence, jako například (viz níže) v jednoduchých uvozovkách, je znak. Tak,



charident1= '' ';

je postava.





Jediný symbol v uvozovkách není znak; je to řetězec jednoho znaku. A nebo c nebo 2 tedy není znak, ale je to řetězec po jednom znaku.

Proměnnou znaku lze znovu přiřadit, později v programu, následujícím způsobem:



charident= 'X';
ident= 'A';

Chcete -li zabránit tomu, aby byl znak přiřazený k identifikátoru změněn později v programu, před definici zadejte vyhrazené slovo, konst, a to následovně:

konst charident= 'd';

Proměnná, ident je údajně jen pro čtení.

Řetězec doslovný

Řetězcový literál je posloupnost znaků v uvozovkách. Tak,

charident1[] = 'Miluji tě'; charident2[] = 'Nesnáším 3 z vás'; charident3[]
= 'my jsme svět'; charident4[] = 'Ahoj světe!';

jsou všechny různé definice řetězcových literálů. Všimněte si použití uvozovek. Pro řetězec neexistuje nic jako obyčejná proměnná. Řetězcový literál je pole znaků, kde místo oddělení pomocí {} je sekvence oddělena znakem. Znaky nejsou odděleny čárkami. Do hranatých závorek lze umístit libovolné číslo větší než počet znaků v řetězcovém literálu. Je však lepší nechat hranaté závorky prázdné.

Jeden znak v uvozovkách není znak; je to řetězec jednoho znaku. A nebo c nebo 2 tedy není znak, ale řetězec po jednom znaku.

Řetězcová proměnná neumožňuje opětovné přiřazení úplného literálu, později v programu-viz níže. Jednotlivé znaky však lze znovu přiřadit-viz níže.

Jednoduchý a dvojitý citát v charakteru nebo doslovu

Chcete -li mít jako postavu jeden citát, udělejte něco jako,

charident= ' '';

Chcete -li jako znak v řetězcovém doslovu použít uvozovku, proveďte něco jako,

charident[] = 'pryč'CD';

Zpětné lomítko se používá v únikové sekvenci, aby se předešlo konfliktu s oddělovači. Abyste měli jako znak dvojitou uvozovku, není třeba zpětné lomítko: „‘ je v pořádku. Chcete -li mít jeden citát v řetězcovém doslovu, není třeba zpětné lomítko: ab’cd je v pořádku.

Vzhledem k tomu, že zpětné lomítko se používá k úniku znaku, musí být při použití jako znak nebo v řetězcovém literálu uniknuto jiným zpětným lomítkem.

Úniková sekvence

Úniková sekvence je jedna z:

''? \ a b F n r> t v

Každá úniková sekvence je obvykle napsána buď jako znak v jednoduchých uvozovkách, nebo jako úniková sekvence v uvozovkách.

  • ‘: Používá se jako znak jedné uvozovky, v jednoduchých uvozovkách.
  • : se používá jako znak uvozovek, doslova.
  • ? : od té doby ? je vyhrazený znak, měl by být doslovně vypuštěn.
  • \: zpětné lomítko by mělo uniknout jako znak nebo v řetězcovém doslovu, aby nemělo za následek jiný význam.
  • a: jednou zazvoní, pokud je použit jako znak nebo v řetězcovém doslovu.
  • b: výsledky jako backspace na displeji v řetězcovém doslovném znění, přičemž se odstraní předchozí znak.
  • f: způsobí, že bude další stránka podána do tiskárny při použití jako znak nebo v doslovném znění.
  • r: vrátí kurzor, kde se má vytisknout další znak, ale v aktuálním řádku.
  • n: vrátí kurzor na začátek dalšího řádku nebo jen na další řádek, v závislosti na operačním systému.
  • t: vytvoří vodorovnou záložku.
  • v: vytvoří svislou záložku.

Operace s postavami

Zřetězení

Podle definice lze dva řetězcové literály spojit s mezerou následovně:

charident[] = 'abc' 'def';
náklady<<ident<< ' n';

Výstupem je: abcdef. Tuto definici lze rozšířit na více než dva literály. Poznámka: prohlášení je definicí, nikoli pouze přiřazením. Definice může dokonce pokračovat na další řádek s mezerou oddělující řádky následovně:

charident[] = 'abc' 'def'
'vzít na vědomí';
náklady<<ident<< ' n';

Výstup je abcdefghi.

Poznámka: Znaky nelze takto zřetězit, protože jednotlivé uvozovky pro znak nemohou mít více než jeden symbol.

Provozovatelé rovnosti

Stejné znaky ve stejném případě jsou si rovny. Nejsou si rovni, pokud nejsou ze stejného případu. Zvážit,

bool výsledek= 'B' == 'B';
náklady<<výsledek<< ' n';

== znamená rovné, zatímco = znamená přiřazené a není rovnocenné. Výstup je 1 pro true. Zvážit,

bool výsledek= 'B' == 'b';
náklady<<výsledek<< ' n';

Výstup je 0 pro false. Zvážit,

bool výsledek= 'b' == 'C';
náklady<<výsledek<< ' n';

Výstup je 0 pro false. Zvážit,

bool výsledek= 'B' ! = 'B';
náklady<<výsledek<< ' n';

! = znamená nerovný, zatímco = znamená přiřazený a nerovný. Výstup je 0 pro false. Zvážit,

bool výsledek= 'B' ! = 'b';
náklady<<výsledek<< ' n';

Výstup je 1 pro true. Zvážit,

bool výsledek= 'b' ! = 'C';
náklady<<výsledek<< ' n';

Výstup je 1 pro true.

Takže == a! = Jsou operátory rovnosti.

Relační operátoři

U běžných znaků v C ++ jsou čísla ve vzestupném pořadí před velkými písmeny a před malými písmeny.

Tak= jsou vysvětleny podobně.

Řetězec doslovný jako objekt

Pole je konstantním ukazatelem na začátek konkrétní sekvence datového typu. Podobně je řetězec konstantním ukazatelem na začátek posloupnosti znaků. Porovnejte následující definice:

intarr[] = {3, 4, 5, 6, 7};
charp[] = {'v', 'nebo', 'm', 'na', 'n'};
charstri[] = 'žena';

První pole je pole ints a má pět prvků. Druhé a třetí pole jsou pole znaků s různými názvy, ale se stejným počtem prvků. Druhé a třetí pole jsou stejné, ale pro jejich jména. Textový obsah druhého pole je ohraničen závorkami; znaky jsou odděleny čárkami a každá postava je v jednoduchých uvozovkách. Textový obsah třetího pole je oddělen uvozovkami; znaky nejsou odděleny čárkami a každý znak není v jednoduchých uvozovkách. Druhé a třetí pole jsou dva způsoby vytváření řetězce, přičemž třetí způsob je lepším způsobem.

arr je konstantní ukazatel na první prvek jeho pole, což znamená, že arr bude vždy ukazovat na místo s celým číslem, 3 i když se změní hodnota 3. Velikost pole, pět prvků, ve skutečnosti nezůstává konstantní. Každou z hodnot pole však lze změnit.

str je konstantní ukazatel na první prvek jeho pole, což znamená, že str bude vždy ukazovat na místo se znakem „w“, i když se změní hodnota „w“. Velikost pole znaků, pět prvků, ve skutečnosti nezůstává konstantní. Každou z hodnot literálu však lze změnit.

stri je konstantní ukazatel na první prvek jeho doslovného (pole), což znamená, že stri bude vždy ukazovat na místo se znakem, i když se hodnota w změní. Velikost řetězcového literálu (pole), pět prvků, ve skutečnosti nezůstává konstantní. Každou z hodnot literálu však lze upravit.

Co je konstantní v poli nebo řetězcovém literálu? Adresa paměti prvního prvku pole nebo literálu zůstává jako hodnota názvu (identifikátoru) pole nebo literálu a nelze ji změnit. Velikost pole nebo literálu ve skutečnosti nezůstává konstantní. Každou hodnotu v poli nebo literálu lze změnit. Následující kód ukazuje, jak byl změněn čtvrtý prvek každého z polí:

intarr[] = {3, 4, 5, 6, 7};
charp[] = {'v', 'nebo', 'm', 'na', 'n'};
charstri[] = 'žena';

arr[3] = 9;
p[3] = 'A';
stri[3] = 'A';

náklady<<arr[3] << ' n';
náklady<<p<< ' n';
náklady<<stri<< ' n';

Výstupem je:

9
ženy
ženy

Všimněte si, že k prvkům definovaného řetězcového literálu, jako pro třetí definici výše, lze přistupovat pomocí indexu pole (indexu). Důvod druhého řádku výstupu je uveden níže.

Definiční index

Všimněte si, že ve výše uvedených definicích neexistuje žádné celé číslo pro dolní index. Když programátor nemůže snadno určit počet prvků, celé číslo pro dolní index by mělo být vynecháno. V každém případě by celé číslo nemělo být menší než počet prvků v poli.

Pro řetězcový literál by celé číslo mělo být alespoň o 1 vyšší než počet znaků v řetězci. Důvodem je, že znak null ( 0) vždy přidává kompilátor na konci pole, které je řetězcem, oddělené uvozovkami. Znak null není přidán na konci druhého pole výše, protože to není oficiální řetězec. Třetí pole je oficiální řetězec. Následující kód ukazuje minimální hodnoty dolního indexu.

intarr[5] = {3, 4, 5, 6, 7};
charp[5] = {'v', 'nebo', 'm', 'na', 'n'};
charstri[6] = 'žena';

Aby byla druhá definice oficiálním řetězcem, musí být znak null přidán následovně:

intarr[5] = {3, 4, 5, 6, 7};
charp[6] = {'v', 'nebo', 'm', 'na', 'n', ' 0'};
charstri[6] = 'žena';

Výstup by nyní měl být,

9
ženy
ženy

bez druhých žen. Všimněte si, že odpovídající dolní index pro druhé pole je 6, a ne 5, jak to bylo.

Konstantní literální hodnoty

Chcete -li zabránit úpravám jakýchkoli znaků v uvozovkách přiřazených k identifikátoru, později v programu, definici předcházejte s vyhrazeným slovem const následovně:

konst charident[] = 'Miluji tě';

Operace s řetězcovými literály

Operace rovnosti

Operátory rovnosti jsou == a! =. Při porovnávání proměnných (identifikátorů) dvou řetězců se porovnávají ukazatele (adresy) literálů; to je špatně. Chcete -li porovnat řetězce, je třeba porovnat literály, jako v následujícím kódu:

bool výsledek= 'žena' == 'žena';
náklady<<výsledek<< ' n';

Výstup je 1 pro true. Porovnání se provádí slovníkovým způsobem, ale čísla jsou na prvním místě ve vzestupném pořadí, před velkými písmeny a před malými písmeny. Výstup následujícího kódu je 0, pro hodnotu false.

bool výsledek= 'žena' ! = 'žena';
náklady<<výsledek<< ' n';

Relační operátory s řetězcovými literály

Relační operátory nefungují s řetězcovými literály.

Doslovný surový řetězec

Doslovný textový řetězec umožňuje zobrazit řetězec jako zadaný, ignoruje sekvence sekvence a respektuje nové řádky. Zvažte následující kód:

charp[] =R.“(abc\tak on
klmn n'
'opq
první) ';
náklady<< str << '
n';

Výstupem je:

abc \ d efg he
KLMN n'' opq
první

V kódu začíná nezpracovaný řetězcový literál na R, následovaný a (. Končí) a.

Literární typy hlavního řetězce C ++

char

Typ char je původní typ C ++ a obvykle ukládá znak do 8 bitů.

char16_t

Tím se uloží postava na 16 bitů.

char32_t

Tím se uloží postava do 32 bitů.

wchar_t

char16_t a char32_t jsou široké znaky. wchar_t je široký charakter, který je proprietární a je definován implementací.

Závěr

Doslovný znak je jeden znak v jednoduchých uvozovkách. Úniková sekvence je znak, který může být také v jednoduchých uvozovkách. Řetězcový literál je posloupnost znaků v uvozovkách. Řetězcový literál je pole znaků, které končí 0. Operátory rovnosti a relace pracují s literály znaků. Operátory rovnosti pracují s řetězcovými literály, ale relační operátory nefungují s řetězcovými literály. Při porovnávání lze použít identifikátory znaků, ale při porovnávání by neměly být použity identifikátory řetězců. Doslovný řetězcový literál umožňuje, aby byl řetězec zobrazen jako zadaný, ignorující sekvence sekvence a respektující nové řádky.

Chrys