C ++

Jak používat řetězcový literál C ++

Jak používat řetězcový literál C ++
Na klávesnici počítače jsou vytištěny znaky. Když stisknete klávesu, uvidíte znak na obrazovce. Poznámka: mezera 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 C ++ polích a ukazatelích.

Postava doslovná

Znakový literál je znak v jednoduchých uvozovkách. Tak,

char ident1 = 'A'; char ident2 = 'b'; char ident3 = '4'; char ident4 = '6';

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

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

char ident1 = '"';

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 jednoho znaku.

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

char ident = 'x';
ident = 'Y';

Chcete-li zastavit změnu znaku přiřazeného k identifikátoru, dále v programu, před definici před vyhrazené slovo, const, následovně:

const char ident = 'd';

Proměnná ident se říká, že je jen pro čtení.

Řetězec doslovný

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

char ident1 [] = "Miluji tě"; char ident2 [] = "Nesnáším 3 z vás"; char ident3 []
= "jsme svět"; char ident4 [] = "Ahoj světe!";

jsou různé definice řetězcových literálů. Všimněte si použití uvozovek. Pro řetězec neexistuje nic jako běžná proměnná. Řetězcový literál je pole znaků, kde místo oddělování pomocí je sekvence oddělena „“. Znaky nejsou odděleny čárkami. Do hranatých závorek lze umístit jakékoli čí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 jednoho znaku.

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

Jednoduchá a dvojitá nabídka v charakteru nebo v doslovném znění

Chcete-li mít jako postavu jedinou citaci, udělejte něco jako,

char ident = '\' ';

Chcete-li mít dvojitou uvozovku jako znak v řetězcovém literálu, udělejte něco jako,

char ident [] = "ab" cd ";

Zpětné lomítko se používá v únikové sekvenci, aby nedošlo ke konfliktu s oddělovači. Chcete-li mít dvojitou uvozovku jako postavu, není třeba zpětné lomítko: '”' je v pořádku. Chcete-li mít jedinou uvozovku v řetězcovém literálu, 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.

Sekvence útěku

Úniková sekvence je jedna z:

\ '"\? \\ \ a \ b \ f \ n \ r> \ t \ v

Každá úniková sekvence se obvykle zadává jako znak v jednoduchých uvozovkách nebo jako úniková sekvence v uvozovkách.

Operace se znaky

Zřetězení

V definici lze dva řetězcové literály spojit s mezerou takto:

char ident [] = "abc" "def";
cout << ident << "\n";

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

char ident [] = "abc" "def"
"ghi";
cout << ident << "\n";

Výstupem je abcdefghi.

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

Provozovatelé rovnosti

Stejné znaky ve stejném případě jsou stejné. Nejsou si rovni, pokud se nejedná o stejný případ. Zvážit,

bool result = 'B' == 'B';
cout << result << "\n";

== znamená rovno, zatímco = znamená přiřazeno a ne rovno. Výstup je 1 pro true. Zvážit,

bool result = 'B' == 'b';
cout << result << "\n";

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

bool result = 'b' == 'c';
cout << result << "\n";

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

bool result = 'B' != 'B';
cout << result << "\n";

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

bool result = 'B' != 'b';
cout << result << "\n";

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

bool result = 'b' != 'c';
cout << result << "\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 ++ ve vzestupném pořadí jsou čísla před velkými písmeny, která jsou před malými písmeny.

Tak < will return true (1) when the left character is less than the right character. The other relational operators, <=, >, > = jsou podobně vysvětleny.

Řetězec doslovný jako objekt

Pole je konstantní ukazatel 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:

int arr [] = 3, 4, 5, 6, 7;
char str [] = 'w', 'o', 'm', 'a', 'n';
char stri [] = "ž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 složenými závorkami; znaky jsou odděleny čárkami a každý znak je uveden v uvozovkách. Textový obsah třetího pole je ohraničen uvozovkami; znaky nejsou odděleny čárkami a každý znak není uveden v uvozovkách. Druhé a třetí pole jsou dva způsoby výroby řetězce, přičemž třetí způsob je lepší způsob.

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

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

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

Co je konstantní v poli nebo řetězcovém literálu? Paměťová adresa 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í:

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ýstupem je:

9
ženy
ženy

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

Definice dolní index

Všimněte si, že ve výše uvedených definicích není pro dolní index žádné celé číslo. Pokud programátor nemůže snadno určit počet prvků, celé číslo pro dolní index by mělo být vynecháno. Ať je tomu tak, celé číslo by nemělo být menší než počet prvků v poli.

U řetězcového literálu 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) je vždy přidán kompilátorem na konec pole, které je řetězcem, oddělené uvozovkami. Znak null není přidán na konec druhého pole výše, protože se nejedná o oficiální řetězec. Třetí pole je oficiální řetězec. Následující kód ukazuje minimální 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 se druhá definice stala oficiálním řetězcem, je třeba přidat znak null následujícím způsobem:

int arr [5] = 3, 4, 5, 6, 7;
char str [6] = 'w', 'o', 'm', 'a', 'n', '\ 0';
char stri [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ý byl.

Konstantní doslovné hodnoty

Chcete-li zastavit úpravy libovolného znaku v uvozovkách přiřazených identifikátoru, později v programu, před definici přidejte vyhrazené slovo, const, následovně:

const char ident [] = "Miluji tě";

Operace s řetězcovými literály

Rovnost operací

Operátory rovnosti jsou == a != . Když jsou porovnávány proměnné (identifikátory) dvou řetězců, jsou to právě ukazatele (adresy) literálů, které skončí porovnáváním; to je špatně. Chcete-li porovnat řetězce, literály je třeba porovnat, jako v následujícím kódu:

bool result = "žena" == "žena";
cout << result << '\n';

Výstup je 1 pro true. Porovnání se provádí způsobem slovníku, ale s čísly přicházejícími jako první ve vzestupném pořadí, před velkými písmeny, která přicházejí před malými písmeny. Výstup následujícího kódu je 0, pro false.

bool result = "žena" != "žena";
cout << result << '\n';

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

Relační operátoři nepracují s řetězcovými literály.

Raw řetězec doslovný

Nezpracovaný řetězcový literál, umožňuje zobrazit řetězec jako zadaný, ignorovat únikové sekvence a respektovat nové řádky. Zvažte následující kód:

char str [] = R "(abc \\ d efg hij
klmn \ n "'opq
rst) ";
cout << str << '\n';

Výstupem je:

abc \\ d efg hij
klmn \ n "'opq
první

V kódu začíná surový řetězcový literál písmenem R, následovaným znaky „a ( . Končí to) a „.

C ++ hlavní řetězcové literální typy

char

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

char16_t

To uloží znak do 16 bitů.

char32_t

To uloží znak do 32 bitů.

wchar_t

char16_t a char32_t jsou široké znaky. wchar_t je širokopásmový znak, který je vlastnický a je definován implementací.

Závěr

Znakový literál 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. Rovnost a relační operátoři pracují s literály znaků. Provozovatelé rovnosti pracují s řetězcovými literály, ale relační operátoři nepracují s řetězcovými literály. Při porovnávání lze použít identifikátory znaků, ale při porovnávání by se neměly používat identifikátory řetězců. Nezpracovaný řetězcový literál umožňuje zobrazení řetězce jako zadaného, ​​ignoruje únikové sekvence a respektuje nové řádky.

Chrys

WinMouse vám umožňuje přizpůsobit a vylepšit pohyb ukazatele myši na PC s Windows
Chcete-li vylepšit výchozí funkce ukazatele myši, použijte freeware WinMouse. Přidává další funkce, které vám pomohou vytěžit ze své skromné ​​myši ma...
V systému Windows 10 nefunguje levé tlačítko myši
Pokud používáte speciální myš s notebookem nebo stolním počítačem, ale levé tlačítko myši nefunguje ve Windows 10/8/7 z nějakého důvodu uvádíme několi...
Kurzor při psaní v systému Windows 10 skáče nebo se pohybuje náhodně
Pokud zjistíte, že kurzor myši skáče nebo se pohybuje sám, automaticky, náhodně při psaní v notebooku nebo počítači se systémem Windows, pak vám někte...