Ako používať triedu reťazcov C ++

How Use C String Class



Reťazcový literál je postupnosť znakov v ukazovateli konštantného poľa zakončená nulovým znakom 0. Ak je reťazec doslovne identifikovaný premennou, nemôže ho skutočne zmenšiť ani zväčšiť. Mnoho operácií nie je možné vykonať na reťazci doslova. Existuje teda potreba triedy reťazcov. Trieda reťazcov C ++ je pre dátovú štruktúru, zbierku znakov v poradí, ktorá umožňuje členským funkciám a operátorom pôsobiť na znaky. Trieda reťazcov umožňuje viac manipulácií so zodpovedajúcim reťazcom doslovného textu, než iba s reťazcom. Na pochopenie tohto článku musíte mať dobré znalosti doslovného reťazca.

Trieda a objekty

Trieda je súbor premenných a funkcií, ktoré spolupracujú; kde premenné nemajú priradené hodnoty. Keď sú premenným priradené hodnoty, trieda sa stane objektom. Rôzne hodnoty dané tej istej triede vedú k rôznym predmetom; to znamená, že rôzne objekty sú rovnakou triedou s rôznymi hodnotami. Vytvorenie objektu z triedy je údajne inštanciou objektu.







Názov, reťazec, je trieda. Objekt vytvorený z triedy reťazcov má názov zvolený programátorom.



Funkcia, ktorá patrí do triedy, je potrebná na vytvorenie inštancie objektu z triedy. V C ++ má táto funkcia rovnaký názov ako názov triedy. Objekty vytvorené (inštancované) z triedy majú rôzne názvy, ktoré im dal programátor.



Vytvorenie objektu z triedy znamená zostrojenie objektu; to tiež znamená inštancovanie.





Program C ++, ktorý používa triedu reťazcov, začína na nasledujúcich riadkoch v hornej časti súboru:

#zahrnúť
#zahrnúť
pomocou priestoru názvov std;

Prvý riadok je pre vstup/výstup. Druhý riadok má umožniť programu využívať všetky funkcie triedy reťazcov. Tretí riadok umožňuje programu používať názvy v štandardnom priestore názvov.



Preťaženie funkcie

Keď majú dva alebo viac rôznych podpisov funkcií rovnaký názov, tento názov je údajne preťažený. Pri volaní jednej funkcie určuje počet a typ argumentov, ktorá funkcia sa vykoná.

Konštrukcia

reťazec ()
Nasledujúci príkaz zostaví reťazec nulovej dĺžky bez znakov.

reťazec strCol=reťazec();

Začína sa názvom triedy (typ objektu), reťazcom. Nasleduje názov reťazca objektu zadaný programátorom. Nasleduje operátor priradenia; potom názov konštruktora s prázdnymi zátvorkami. StrCol je tu inštancionalizovaný objekt so všetkými dátovými členmi (vlastnosťami) a členskými funkciami (metódami).
reťazec (str)
Toto je podobné vyššie uvedenému, ale v argumente konstruktora je buď argumentový reťazec, alebo identifikátor. Nasledujúce vyhlásenie to ilustruje:

reťazec strCol=reťazec('Ľúbim ťa');

Konštrukcia so zoznamom inicializátorov

Nasledujúci kód to ilustruje:

reťazec strCol=reťazec({'Ja','','the','alebo','v',„A“,'','a','alebo','u',' 0'});

Reťazec doslovne znie Milujem ťa. Všimnite si znak nula na konci zoznamu inicializátorov.

reťazec (str, n)

Toto tvorí zbierku reťazcov prvých n znakov iného reťazca. Nasledujúci kód to ilustruje:

charp[] = 'Ľúbim ťa';
reťazec strCol=reťazec(p, 6);
náklady<<strCol<< ' n';

Výstupom je Milujem prvých 6 postáv z filmu Milujem ťa. Pamätajte si: jedno miesto je znak.

reťazec (str, poz, n)

To tvorí reťazcovú zbierku n znakov, začínajúc od nulovej indexovanej polohy, pos, iného reťazca. Nasledujúci kód to ilustruje:

charp[] = 'Ľúbim ťa';
reťazec strCol=reťazec(p, 2, 4);
náklady<<strCol<< ' n';

Výstupom je láska.

Vo vyššie uvedených dvoch prípadoch platí, že ak n je väčšie ako veľkosť reťazca, vyvolá sa výnimka out_of_range - pozri neskôr.

reťazec (n, „c“)

Tvorí zbierku n znakov, kde sú všetky znaky rovnaké. Zvážte,

reťazec strCol=reťazec(5,„A“);
náklady<<strCol<< ' n';

Výstup je, eeeee, 5 e.

Priradenie reťazca

Po deklarovaní oboch reťazcov je možné reťazec priradiť nasledovne:

reťazec strCol1=reťazec('Ľúbim ťa');
reťazec strCol2;
strCol2=strCol1;
náklady<<strCol2<< ' n';

Výstupom je, milujem ťa.

Konštrukcia s iterátorom

Iterátor poskytuje generickú reprezentáciu skenovania prostredníctvom hodnôt kolekcie. Syntax na vytvorenie reťazca s iterátorom je:

predloha<trieda InputIterator>
basic_string(Začne sa InputIterator,Koniec editora vstupu, konštPrideľovač&
do=Prideľovač());

Tým sa vytvorí reťazec pre rozsah [začiatok, koniec] - podrobnosti nájdete neskôr.

Zničenie reťazca

Ak chcete reťazec zničiť, nechajte ho ísť mimo rozsah.

Prístup k prvku reťazcovej triedy

Inštancovaný objekt reťazca môže byť subskriptovaný (indexovaný) ako pole. Počítanie indexu začína od nuly.

stringName [i]

Operácia stringName [i] vracia odkaz na znak (prvok) na ithindex zbierky znakov. Nasledujúce výstupy kódu v:

reťazec strCol=reťazec('Ľúbim ťa');
charch=strCol[4];
náklady<<ch<< ' n';

stringName [i] konšt

Operácia stringName [i] const sa vykoná namiesto stringName [i], ak je reťazcový objekt konštantným objektom. Používa sa napríklad v nasledujúcom kóde:

konštreťazec strCol=reťazec('Ľúbim ťa');
charch=strCol[4];
náklady<<ch<< ' n';

Výraz vracia konštantný odkaz na ithprvok reťazcového objektu. Žiadny z prvkov reťazca nemožno zmeniť.

Priradenie postavy pomocou dolného indexu

K nekonštantnému reťazcovému objektu je možné priradiť znak nasledovne:

reťazec strCol=reťazec('Volám');
strCol[2] = 'f';
náklady<<strCol<< ' n';

Výstup je, že padám. „C“ sa zmenilo na „f“.

stringName.at (i)

stringName.at (i) je podobný stringName [i], ale stringName.at (i) je spoľahlivejší. Nasledujúci kód ukazuje, ako by sa mal používať:

reťazec strCol=reťazec('Ľúbim ťa');
charch=strCol.o(4);
náklady<<ch<< ' n';

at () je v skutočnosti členská funkcia triedy reťazcov.

stringName.at (i) konšt

stringName.at (i) const je podobný stringName [i] const, ale stringName.at (i) const je spoľahlivejší. stringName.at (i) const sa vykoná namiesto stringName.at (i), ak je reťazcový objekt konštantným reťazcovým objektom. Používa sa napríklad v nasledujúcom kóde:

konštreťazec strCol=reťazec('Ľúbim ťa');
charch=strCol.o(4);
náklady<<ch<< ' n';

at () const je v skutočnosti členskou funkciou triedy reťazcov.

Priradenie hodnoty pomocou funkcie at ()

Nekonštantnému reťazcovému objektu s funkciou at () je možné priradiť hodnotu nasledovne:

reťazec strCol=reťazec('Volám');
strCol.o(2) = 'f';
náklady<<strCol<< ' n';

Výstup je, že padám.

Problém so subskriptovaním

Problém so sub-skriptovaním (indexovaním) je, že ak je index mimo rozsahu, môže dôjsť k nesprávnemu výsledku alebo k chybe za behu.

vpredu ()

Tým sa vráti odkaz na prvý prvok reťazcového objektu bez odstránenia prvku. Výstupom nasledujúceho kódu je „I“.

reťazec strCol=reťazec('Ľúbim ťa');
charch=strCol.vpredu();
náklady<<ch<< ' n';

Znak nie je odstránený z reťazcového objektu.

predná () konšt

Keď konštrukcii objektu reťazca predchádza const, namiesto výrazu front () sa vykoná výraz front () const. Používa sa napríklad v nasledujúcom kóde.

konštreťazec strCol=reťazec('Ľúbim ťa');
charch=strCol.vpredu();
náklady<<ch<< ' n';

Vráti sa konštantná referencia. Prvok nie je odstránený z reťazcového objektu. Pre objekt s konštantným reťazcom nemožno zmeniť žiadny znak.

späť()

Tým sa vráti odkaz na posledný prvok reťazcového objektu bez odstránenia prvku. Výstupom nasledujúceho kódu je „u“.

reťazec strCol=reťazec('Ľúbim ťa');
charch=strCol.späť();
náklady<<ch<< ' n';

späť () konšt

Keď konštrukcii objektu reťazca predchádza príkaz const, namiesto príkazu back () sa vykoná výraz back () const. Používa sa napríklad v nasledujúcom kóde.

konštreťazec strCol=reťazec('Ľúbim ťa');
charch=strCol.späť();
náklady<<ch<< ' n';

Vráti sa konštantná referencia. Prvok nie je odstránený z reťazcového objektu.

Kapacita reťazca

size_type kapacita () konšt. noexcept

Táto členská funkcia kapacity vracia celkový počet znakov, ktoré môže reťazec obsahovať bez opätovného priradenia. Segment kódu pre toto je:

reťazec strCol=reťazec();
intna jeden=strCol.kapacity();
náklady<<na jeden<< ' n';

Výstup je 15 na mojom počítači.

rezerva (n)

Pamäťové miesto nie je vo voľnom obchode vždy k dispozícii. Extra miesto je možné rezervovať vopred. Zvážte nasledujúci segment kódu:

reťazec strCol=reťazec('láska');
strCol.rezerva(6);
náklady<<strCol.kapacity() << ' n';

Výstup je 15 na mojom počítači.

size () const noexcept

Tým sa vráti počet znakov v reťazci. Nasledujúci kód ilustruje:

reťazec strCol=reťazec('Ľúbim ťa');
intna jeden=strCol.veľkosť();
náklady<<na jeden<< ' n';

Výstup je 10, čo neobsahuje znak nula, 0.

dĺžka () konšt. noexcept

-rovnaká ako veľkosť().
Poznámka:veľkosť() <=kapacity().

zmenšiť, aby sa zmestili()

Môže znížiť kapacitu () na veľkosť () spôsobením realokácie; nie je to povinné. Nasledujúci kód to ukazuje:

reťazec strCol=reťazec('Ľúbim ťa');
strCol.rezerva(12);
strCol.zmenšiť, aby sa zmestili();
ints=strCol.veľkosť();
náklady<<s<< ' n';

Výstup je 10 a nie 12 alebo 16. Funkcia vráti neplatné.

resize (sz), resize (sz, ‘c’)

Tým sa zmení veľkosť reťazca. Ak je nová veľkosť menšia ako stará veľkosť, prvky na konci sa vymažú. Ak je nová veľkosť dlhšia, ku koncu sa pridá nejaký predvolený znak. Ak chcete pridať konkrétny znak, použite funkciu resize () s dvoma argumentmi. Nasledujúci segment kódu ilustruje použitie týchto dvoch funkcií:

reťazec strCol=reťazec('Ľúbim ťa');
strCol.zmeniť veľkosť(6);
náklady<< „Nová veľkosť strCol:“ <<strCol.veľkosť() << ' n';
reťazec strCol1=reťazec('Milujem', „A“);
strCol1.zmeniť veľkosť(12);
náklady<< „Nová veľkosť strCol1:“ <<strCol1.veľkosť() << ' n';

Výstupom je:

Nová veľkosť strCol: 6
Nová veľkosť strCol1: 12
Funkcia vráti neplatné.

clear () noexcept

Odstráni všetky prvky z reťazca, ako ukazuje nasledujúci segment kódu:

reťazec strCol=reťazec('Ľúbim ťa');
strCol.jasný();
náklady<<strCol.veľkosť() << ' n';

Výstup je 0. Funkcia vráti neplatné.

empty () const noexcept

Vráti hodnotu 1 pre hodnotu true, ak v objekte reťazca nie je žiadny znak, alebo 0 pre hodnotu false, ak objekt reťazca nie je prázdny. Nasledujúci kód to ilustruje:

reťazec strCol1=reťazec('Ľúbim ťa');
náklady<<strCol1.prázdny() << ' n';
reťazec strCol2=reťazec();
náklady<<strCol2.prázdny() << ' n';

Výstupom je:

0
1

Vracajúce sa iterátory a trieda reťazcov

Iterátor je ako ukazovateľ, ale má viac funkcií ako ukazovateľ.

begin () noexcept

Vráti iterátor, ktorý ukazuje na prvý znak (prvok) reťazcového objektu, ako v nasledujúcom segmente kódu:

reťazec strCol=reťazec('Ľúbim ťa');
basic_string<char> ::iterátoriter=strCol.začať();
náklady<< *iter<< ' n';

Výstupom je „I“. Všimnite si toho, ako bolo deklarované vyhlásenie, ktoré prijíma iterátor. Iterátor je dereferencovaný v návratovom výraze, aby získal hodnotu rovnakým spôsobom, akým je dereferencovaný ukazovateľ.

begin () const noexcept;

Vráti iterátor, ktorý ukazuje na prvý prvok kolekcie reťazcových objektov. Keď konštrukcii objektu predchádza const, namiesto begin () sa vykoná výraz begin () const. Za tejto podmienky nemožno zodpovedajúci prvok v objekte upraviť. Používa sa napríklad v nasledujúcom kóde.

konštreťazec strCol=reťazec('Ľúbim ťa');
basic_string<char> ::const_iteratoriter=strCol.začať();
náklady<< *iter<< ' n';

Výstupom je „I“. Všimnite si toho, že tentoraz bol na prijatie vráteného iterátora použitý const_iterator, nie iba iterátor.

end () noexcept

Vráti iterátor, ktorý ukazuje bezprostredne za posledný prvok reťazcového objektu. Zvážte nasledujúci segment kódu:

reťazec strCol=reťazec('Ľúbim ťa');
basic_string<char> ::iterátoriter=strCol.koniec();
náklady<< *iter<< ' n';

Výstup je nulový, čo je nič, pretože za posledným prvkom nie je žiadny konkrétny prvok.

end () const noexcept

Vráti iterátor, ktorý ukazuje bezprostredne za posledný prvok reťazcového objektu. Keď konštrukcii objektu reťazca predchádza const, namiesto end () sa vykoná výraz end () const. Zvážte nasledujúci segment kódu:

konštreťazec strCol=reťazec('Ľúbim ťa');
basic_string<char> ::const_iteratoriter=strCol.koniec();
náklady<< *iter<< ' n';

Výstup je nulový. Všimnite si toho, že tentoraz bol na prijatie vráteného iterátora použitý const_iterator, nie iba iterátor.

Reverzná iterácia

Je možné mať iterátor, ktorý iteruje od skutočného konca tesne pred prvý prvok:

rbegin () noexcept

Vráti iterátor, ktorý ukazuje na posledný prvok objektu inštancie reťazca, ako v nasledujúcom segmente kódu:

reťazec strCol=reťazec('Ľúbim ťa');
basic_string<char> ::reverzný_iterátoriter=strCol.rbegin();
náklady<< *iter<< ' n';

Výstupom je „u“. Všimnite si toho, ako bolo deklarované vyhlásenie, ktoré prijme reverzný iterátor. Iterátor je dereferencovaný v návratovom výraze, aby získal hodnotu rovnakým spôsobom, akým je dereferencovaný ukazovateľ.

rbegin () const noexcept;

Vráti iterátor, ktorý ukazuje na posledný prvok reťazcového objektu. Keď konštrukcii objektu predchádza const, namiesto rbegin () sa vykoná výraz rbegin () const. Za tejto podmienky nemožno zodpovedajúci prvok v objekte upraviť. Táto funkcia sa používa napríklad v nasledujúcom kóde.

konštreťazec strCol=reťazec('Ľúbim ťa');
basic_string<char> ::const_reverse_iteratoriter=strCol.rbegin();
náklady<< *iter<< ' n';

Výstupom je „u“. Všimnite si toho, že tentoraz bol na prijatie vráteného iterátora použitý const_reverse_iterator, namiesto iba reverse_iterator.

render () noexcept

Vráti iterátor, ktorý ukazuje tesne pred prvý prvok reťazcového objektu. Zvážte nasledujúci segment kódu:

reťazec strCol=reťazec('Ľúbim ťa');
basic_string<char> ::reverzný_iterátoriter=strCol.robí();
náklady<< *iter<< ' n';

Výstup je nulový, čo je nič, pretože tesne pred prvým prvkom neexistuje žiadny konkrétny prvok.

render () const noexcept

Vráti iterátor, ktorý ukazuje tesne pred prvý prvok reťazcového objektu. Keď konštrukcii objektu predchádza const, namiesto rend () sa vykoná výraz rend () const. Zvážte nasledujúci segment kódu:

konštreťazec strCol=reťazec('Ľúbim ťa');
basic_string<char> ::const_reverse_iteratoriter=strCol.robí();
náklady<< *iter<< ' n';

Výstup je nulový. Všimnite si toho, že tentoraz bol na prijatie vráteného iterátora použitý const_reverse_iterator, namiesto iba reverse_iterator.

Modifikátory reťazcov

Modifikátor, ktorý upravuje objekt reťazca, môže tiež vziať alebo vrátiť iterátor.

Pripojenie

basic_string&operátor+ =(konštbasic_string&p)

Pripojí objekt pravého reťazca k objektu ľavého reťazca. Príklad:

reťazec strCol1=reťazec('Milujem');
reťazec strCol2=reťazec('ty');
strCol1+ =strCol2;
náklady<<strCol1<< ' n';

Výstupom je Milujem ťa. Nezabudnite, že strCol1 += strCol2 je rovnaké ako strCol1 = strCol1 +strCol2.

basic_string & operator+= (const charT* s)

Pripojí doslovný reťazec do kolekcie reťazcových objektov. Príklad:

reťazec strCol=reťazec('Milujem');
strCol+ = 'ty';
náklady<<strCol<< ' n';

Výstup: Milujem ťa.

basic_string & operator+= (charT c)

Pripojí jeden znak k reťazcu objektu. Príklad:

reťazec strCol=reťazec('Milujem ta');
strCol+ = 'u';
náklady<<strCol<< ' n';

Výstup: Milujem ťa.

basic_string & operator+= (zoznam inicializátorov)

Pripojí zoznam inicializátorov. Príklad:

reťazec strCol=reťazec('Milujem');
strCol+ = {'','a','alebo','u',' 0'};
náklady<<strCol<< ' n';

Výstup: Milujem ťa. Vždy je dobré pridať číslo nula 0 na koniec zoznamu inicializátorov znakov.

basic_string & append (const basic_string & str)

Pripojí objekt reťazca argumentov k objektu hlavného reťazca. Príklad:

reťazec strCol1=reťazec('Milujem');
reťazec strCol2=reťazec('ty');
strCol1.priložiť(strCol2);
náklady<<strCol1<< ' n';

Výstup: Milujem ťa.

basic_string & append (const charT* s)

Pripojí k hlavnému reťazcu argument doslovného reťazca. Príklad

reťazec strCol=reťazec('Milujem');
strCol=strCol.priložiť('ty');
náklady<<strCol<< ' n';

Výstup: Milujem ťa.

basic_string & append (zoznam inicializátorov)

Pripojí zoznam inicializátorov, čo je argument, k hlavnému reťazcu. Príklad:

reťazec strCol=reťazec('Milujem');
strCol=strCol.priložiť({'','a','alebo','u',' 0'});
náklady<<strCol<< ' n';

Výstup: Milujem ťa. Na koniec zoznamu inicializátorov je vždy dobré pridať znak nula 0.

basic_string & append (size_type n, charT c)

Pripojí n rovnakého znaku. Príklad:

reťazec strCol=reťazec('karta');
strCol=strCol.priložiť(2, 'alebo');
náklady<<strCol<< ' n';

Výstup: tabu.

basic_string & append (const charT* s, size_type n)

Pripojí prvých n prvkov reťazcového literálu k objektu hlavného reťazca. Príklad:

reťazec strCol=reťazec('Milujem');
strCol=strCol.priložiť('ty tak', 4);
náklady<<strCol<< ' n';

Výstup je: Milujem ťa. Ak je n väčšie ako dĺžka literálu, vyvolá sa výnimka length_error.

basic_string & append (const basic_string & str, size_type pos, size_type n = npos)

Pripojí n znakov z indexu, pos do hlavného reťazca. Príklad:

reťazec strCol=reťazec('Milujem');
strCol=strCol.priložiť(si taký?, 2, 4);
náklady<<strCol<< ' n';

Výstup: Milujem ťa. Tu by sa hodila aj výnimka, pozri neskôr.

Priradenie

basic_string&priradiť(konštbasic_string&p)

Priradí objekt reťazca argumentov k hlavnému reťazcu, čím nahradí všetok obsah, ktorý tam bol.

reťazec strCol1=reťazec('Ľúbim ťa');
reťazec strCol2=reťazec(„Potrebuje ma“);
strCol1=strCol1.priradiť(strCol2);
náklady<<strCol1<< ' n';

Výstup: Potrebuje ma.

basic_string&priradiť(konštcharT*s)

Hlavnému reťazcu priradí argument doslovného reťazca, ktorý nahradí obsah, ktorý tam bol.

reťazec strCol=reťazec('Ľúbim ťa');
strCol=strCol.priradiť(„Potrebuje ma“);
náklady<<strCol<< ' n';

Výstup: Potrebuje ma.

basic_string&priradiť(zoznam inicializátorov<charT>)

K hlavnému reťazcu priradí argument zoznamu inicializátorov,nahradením akéhokoľvek obsahu, ktorý tam bol.
[cc lang='c'utiekol='pravda'šírka=„780“]
reťazec strCol=reťazec('Ľúbim ťa');
strCol=strCol.priradiť({'S','h',„A“,'','n',„A“,„A“,'d','s','','m',„A“,' 0'});
náklady<<strCol<< ' n';

Výstup: Potrebuje ma. Na vytvorenie reťazcového literálu je dobré vždy pridať nula 0 na koniec zoznamu znakov.

basic_string&priradiť(konštcharT*s,size_type n)

K hlavnému reťazcu priradí prvých n znakov reťazcového doslovného argumentu, čím nahradí všetok obsah, ktorý tam bol.

reťazec strCol=reťazec('Ľúbim ťa');
strCol=strCol.priradiť(„Potrebuje ma“, 9);
náklady<<strCol<< ' n';

Výstup: Potrebuje.

basic_string&priradiť(size_type n,charta c)

Hlavnému reťazcu priradí argument n rovnakých znakov, čím sa nahradí obsah, ktorý tam bol.

reťazec strCol=reťazec('Ľúbim ťa');
strCol=strCol.priradiť(4, „A“);
náklady<<strCol<< ' n';

Výstup: eeee

basic_string&priradiť(konštbasic_string&p,size_type poz,
size_type n=npos)

K hlavnému reťazcu priradí n znakov argumentu reťazcového objektu, začínajúc od pos, čím nahradí akýkoľvek obsah, ktorý tam bol.

reťazec strCol=reťazec('Ľúbim ťa');
strCol=strCol.priradiť(„Potrebuje ma“, 4, 5);
náklady<<strCol<< ' n';

Výstup: potreby. Vyhodí výnimku - pozri neskôr.

Vkladanie

basic_string&vložiť(size_type poz, konštbasic_string&p)

Vloží argument objektu reťazca do hlavného reťazca, do indexu, poz.

reťazec strCol1=reťazec('Ľúbim ťa');
reťazec strCol2=reťazec(„nenávisť a“);
strCol1=strCol1.vložiť(2,strCol2);
náklady<<strCol1<< ' n';

Výstup: Nenávidím a milujem ťa. Vyhodí výnimku - pozri neskôr.

basic_string&vložiť(size_type pos1, konštbasic_string&
p,size_type pos2,size_type n=npos)

Vloží dĺžku n znakov z pos2 argumentu reťazcového objektu do hlavného reťazca v indexe, pos1.

reťazec strCol1=reťazec('Ľúbim ťa');
reťazec strCol2=reťazec(„nenávisť, chcieť a potrebovať“);
strCol1=strCol1.vložiť(2,strCol2, 6, 9);
náklady<<strCol1<< ' n';

Výstup: Chcem a milujem ťa.

vložka iterátora (const_iterator p, charT c)

Vloží konkrétny znak, ktorý je argumentom, do polohy, na ktorú ukazuje iterátor. Vráti iterátor polohy novo vloženého znaku.

reťazec strCol=reťazec('Ľúbim ťa');
basic_string<char> ::iterátoriter=strCol.začať();
++iter; ++iter; ++iter; ++iter; ++iter; ++iter;
basic_string<char> ::iterátorsiete=strCol.vložiť(iter, 'd');
náklady<< *siete<< ' n';
náklady<<strCol<< ' n';

Výstupom je:

'D'

miloval som ťa

vložka iterátora (const_iterator p, size_type n, charT c)

Vloží n rovnakého charakteru argumentu do polohy, na ktorú ukazuje iterátor. Vráti iterátor pre pozíciu začiatku novo vložených rovnakých znakov.

reťazec strCol=reťazec(„Tab v krajine.“);
basic_string<char> ::iterátoriter=strCol.začať();
++iter; ++iter; ++iter;
basic_string<char> ::iterátorsiete=strCol.vložiť(iter, 2, 'alebo');
náklady<< *siete<< ' n';
náklady<<strCol<< ' n';

Výstupom je:

'alebo'

Tabu v krajine.

basic_string&vložiť(size_type poz, konštcharT*s)

Vloží reťazec argumentov doslovný do indexu, pos do hlavného reťazca.

reťazec strCol=reťazec(„Tab v krajine.“);
strCol=strCol.vložiť(3, 'oo');
náklady<<strCol<< ' n';

Výstup: Tabu v krajine.

basic_string&vložiť(size_type poz, konštcharT*s,size_type n)

Vloží prvých n znakov doslovného argumentu, do indexu, pos do hlavného reťazca.

reťazec strCol=reťazec(„Tab v krajine.“);
strCol=strCol.vložiť(3, 'ooo', 2);
náklady<<strCol<< ' n';

Výstup: Tabu v krajine.

Výmena

basic_string&vymeniť(size_type pos1,typ_veľkosti n1, konštbasic_string&p))

Nahradí n1 znakov v hlavnom reťazcovom objekte z indexu, pos1, objektom argumentového reťazca.

reťazec strCol1=reťazec('Ľúbim ťa');
reťazec strCol2=reťazec(„Nenávidím ťa a“);
strCol1=strCol1.vymeniť(2, 4,strCol2);
náklady<<strCol1<< ' n';

Výstup: Nenávidím teba a teba. Vyhodí výnimku - pozri neskôr.

basic_string&vymeniť(size_type pos1,typ_veľkosti n1, konštbasic_string&
p,size_type pos2,typ_veľkosti n2=npos)

Nahradí n1 znakov v hlavnom reťazcovom objekte z indexu, pos1, za n2 znakov argumentového reťazcového objektu z indexu, pos2.

reťazec strCol1=reťazec('Ľúbim ťa');
reťazec strCol2=reťazec(„Nenávidíme jeho a ňu“);
strCol1=strCol1.vymeniť(2, 4,strCol2, 3, 12);
náklady<<strCol1<< ' n';

Výstup: Nenávidím jeho aj teba.

basic_string&vymeniť(size_type pos1,typ_veľkosti n1, konštcharT*s,
typ_veľkosti n2)

Nahradí n1 znakov v hlavnom reťazcovom objekte z indexu, pos1, prvými n2 znakmi argumentu doslovného reťazca.

reťazec strCol1=reťazec('Ľúbim ťa');
strCol1=strCol1.vymeniť(2, 4, „nenávidieť jeho a ju“, 12);
náklady<<strCol1<< ' n';

Výstup: Nenávidím jeho aj teba.

basic_string & replace (size_type pos, size_type n, const charT* s)

Nahradí n znakov v hlavnom reťazcovom objekte z indexu, pos, argumentom doslovný reťazec.

reťazec strCol1=reťazec('Ľúbim ťa');
strCol1=strCol1.vymeniť(2, 4, „nenávidieť ho a“);
náklady<<strCol1<< ' n';

Výstup: Nenávidím jeho aj teba.

basic_string&vymeniť(size_type pos1,typ_veľkosti n1,typ_veľkosti n2,charta c)

Nahradí n1 znakov v hlavnom reťazcovom objekte z indexu, pos1, za n2 rovnakého znaku argumentu.

reťazec strCol1=reťazec('Je tam zlý tablet.');
strCol1=strCol1.vymeniť(9, 3, 2, 'alebo');
náklady<<strCol1<< ' n';

Výstup: Je tam zlé tabu.

vymazanie iterátora (const_iterator p)

Odstráni znak v pozícii, na ktorú ukazuje iterátor; potom vráti pozíciu iterátora, ktorá je teraz obsadená znakom, ktorý bol vedľa tohto znaku (alebo end ()). Nasledujúci kód to ilustruje:

reťazec strCol=reťazec('a B C d');
basic_string<char> ::iterátoriter=strCol.začať();
++iter; ++iter;
strCol.vymazať(iter);
náklady<<strCol[0] << '' <<strCol[1] << '
'
<<strCol[2]<< ' n';

Výstup: a b d

basic_string&vymazať(size_type poz= 0,size_type n=npos)

Odstráni n znakov z indexu, poz.

reťazec strCol=reťazec('a B C d');
strCol.vymazať(1, 2);
náklady<<strCol[0] << '' <<strCol[1] << ' n';

Výstup: a d

neplatné push_back (charT c)

Ak chcete pridať jeden znak na koniec reťazca:

reťazec strCol=reťazec('a B C d');
strCol.push_back('5');
náklady<<strCol<< ' n';

Výstup: abcd5

neplatné pop_back ()

Odstráni posledný znak bez jeho vrátenia. Veľkosť reťazca sa zníži o 1.

reťazec strCol=reťazec('a B C d e');
strCol.pop_back();
náklady<<strCol<< ' n';

Výstup: abcd

výmena neplatnosti (basic_string & s)

Literál dvoch reťazcových objektov je možné zameniť.

reťazec strCol1=reťazec(<id='post-69618 -__ DdeLink__781_3724385525'>do>'a B C d e');
reťazec strCol2=reťazec(„1234567“);
strCol1.vymeniť(strCol2);
náklady<<strCol1<< ' n';
náklady<<strCol2<< ' n';

Výstupom je:

„1234567“
'a B C d e'

Operácie reťazcov

const charT* c_str () const noexcept

Vráti ukazovateľ na prvý prvok reťazca. Ukazovateľ je možné zvýšiť.

konštreťazec strCol=reťazec('a B C d e');
konšt char*p=strCol.c_str();
náklady<< *p<< ' n';
++p;
náklady<< *p<< ' n';

Výstup je:

do
b

Vzhľadom na druhú konštantu v nadpise program nemôže zmeniť žiadny znak v reťazci. Stavbe predchádza konšt.

const charT* data () const noexcept

Vráti ukazovateľ na prvý prvok reťazca. Ukazovateľ je možné zvýšiť.

konštreťazec strCol=reťazec('a B C d e');
konšt char*p=strCol.údaje();
náklady<< *p<< ' n';
++p;
náklady<< *p<< ' n';

Výstup je:

do
b

Vzhľadom na druhú konštantu v nadpise program nemôže zmeniť žiadny znak v reťazci. Stavbe predchádza konšt.

basic_string substr (size_type pos = 0, size_type n = npos) const

Vráti reťazcový objekt s n znakmi pre podreťazec začínajúci od indexu, poz.

konštreťazec strCol=reťazec(„abcdefghij“);
konštreťazec retStr=strCol.substr(2, 4);
náklady<<retStr<< ' n';

Výstup: cdef

find () Členské funkcie

size_type find (const basic_string & str, size_type pos = 0) const noexcept

Hľadá objekt podreťazca začínajúci od indexu, poz. Ak je nájdený, vráti začiatok podreťazca v hlavnom reťazci.

reťazec strCol=reťazec('My sme svet!');
reťazec strCol1=reťazec('the');
intna jeden=strCol.Nájsť(strCol1, 2);
náklady<<na jeden<< ' n';

Výkon:

index: 7
Vráti -1, ak sa nenájde.

size_type find (const charT* s, size_type pos = 0) konšt

Hľadá doslovný reťazec začínajúci sa indexom, poz. Ak je nájdený, vráti začiatok podreťazca v hlavnom reťazci.

reťazec strCol=reťazec('My sme svet!');
intna jeden=strCol.Nájsť('sú', 0);
náklady<<na jeden<< ' n';

Pretože pos = 0 je predvolená hodnota, 0 v argumente bolo možné vynechať.

Výstup: 3

Vráti -1, ak sa nenájde.

size_type find (const charT* s, size_type pos, size_type n) const

Hľadá prvých n znakov podreťazcového literálu začínajúceho od indexu, poz. Ak je nájdený, vráti začiatok podreťazca v hlavnom reťazci.

reťazec strCol=reťazec(„Najväčší chlapec“);
intna jeden=strCol.Nájsť(„väčší“, 1, 3);
náklady<<na jeden<< ' n';

Výstup: 4

Vráti -1, ak sa nenájde.

size_type find (charT c, size_type pos = 0) konšt

Hľadá znak, c začínajúc od indexu, poz. Ak je nájdený, vráti začiatok podreťazca v hlavnom reťazci. Ak sa nenájde, vráti -1.

reťazec strCol=reťazec('My sme svet!');
intna jeden=strCol.Nájsť(„S“);
náklady<<na jeden<< ' n';

Výstup: -1

Existujú nasledujúce členské funkcie obráteného vyhľadávania ():

size_type rfind(konštbasic_string&p,size_type poz=npos) konštnoexcept;
size_type rfind(konštcharT*s,size_type poz=npos) konšt;
size_type rfind(konštcharT*s,size_type poz,size_type n) konšt;
size_type rfind(charta c,size_type poz=npos) konšt;

Porovnávacie členské funkcie

int porovnať (const basic_string & str) const noexcept

Porovnáva objekt reťazca argumentu s hlavným objektom reťazca. Ak sa hlavný reťazec nachádza pred argumentom (v slovníku), vráti kladné číslo. Ak sa vyskytne za hlavným reťazcom, vráti záporné číslo. Ak sú dva reťazce rovnaké, vráti nulu.

reťazec strCol1=reťazec(„dav“);
reťazec strCol2=reťazec('ľudia');
intna jeden=strCol1.porovnať(strCol2);
náklady<<na jeden<< ' n';

Výstup: -13

int porovnať (const charT* s) konšt

Rovnaké ako vyššie, ale argument je reťazcový doslovný.

reťazec strCol1=reťazec('ľudia');
intna jeden=strCol1.porovnať('ľudia');
náklady<<na jeden<< ' n';

Výstup: 0

Operátory reťazcov

Tieto operátory sú použiteľné pre reťazcové objekty a nie nevyhnutne pre reťazcové literály.

+

Spojí dva reťazcové objekty a vráti zreťazenie.

reťazec strCol1=reťazec(„tancovať na“);
reťazec strCol2=reťazec(' mesiac');
reťazec strCol=strCol1+strCol2;
náklady<<strCol<< ' n';

Výstup: tanec na mesiaci.

==

Vráti hodnotu 1 pre hodnotu true, ak sú reťazcové objekty rovnaké; a nula pre false, ak nie sú.

reťazec strCol1=reťazec(„tancovať na“);
reťazec strCol2=reťazec(' na Mesiaci');
bool bl=strCol1==strCol2;
náklady<<bl<< ' n';

Výstup: 0

! =

Vráti 1, ak reťazcové objekty nie sú rovnaké, a nulu, ak sú.

reťazec strCol1=reťazec(„tancovať na“);
reťazec strCol2=reťazec(' na Mesiaci');
bool bl=strCol1! =strCol2;
náklady<<bl<< ' n';

Výstup: 1

<

Vráti hodnotu 1, ak je ľavý operand menší ako pravý operand podľa slovníka, alebo nula, ak nie je.

reťazec strCol1=reťazec(„tancovať na“);
reťazec strCol2=reťazec(' na Mesiaci');
bool bl=strCol1<strCol2;
náklady<<bl<< ' n';

Výstup: 0

Pri bežných znakoch v C ++ sú čísla vo vzostupnom poradí pred veľkými písmenami a pred malými písmenami. Vesmírna postava prichádza pred nulu a všetky.

C ++ Typy znakov hlavného reťazca

char

Typ char je pôvodný typ C ++ a zvyčajne by ukladal znak v 8 bitoch.

char16_t

Toto uloží postavu v 16 bitoch.

char32_t

Toto uloží postavu v 32 bitoch.

wchar_t

char16_t a char32_t sú široké znaky. wchar_t je široký charakter, ktorý je patentovaný a definovaný implementáciou.

Tieto typy sa nazývajú vlastnosti. C ++ ich však technicky označuje ako špecializácie vlastností. Tento článok sa zameral na typ char. Prístup k ostatným typom je mierne odlišný - pozri neskôr.

Ďalšie funkcie člena pre operáciu reťazca

Podpisy ďalších funkcií operácií s reťazcami sú:

size_type find_first_of(konštbasic_string&p,size_type poz= 0) konštnoexcept;
size_type find_first_of(konštcharT*s,size_type poz,size_type n) konšt;
size_type find_first_of(konštcharT*s,size_type poz= 0) konšt;
size_type find_first_of(charta c,size_type poz= 0) konšt;
size_type find_last_of(konštbasic_string&p,size_type poz=npos) konštnoexcept;
size_type find_last_of(konštcharT*s,size_type poz,size_type n) konšt;
size_type find_last_of(konštcharT*s,size_type poz=npos) konšt;
size_type find_last_of(charta c,size_type poz=npos) konšt;
size_type find_first_not_of(konštbasic_string&p,size_type poz= 0) konštnoexcept;
size_type find_first_not_of(konštcharT*s,size_type poz,size_type n) konšt;
size_type find_first_not_of(konštcharT*s,size_type poz= 0) konšt;
size_type find_first_not_of(charta c,size_type poz= 0) konšt;
size_type find_last_not_of(konštbasic_string&p,size_type poz=npos) konštnoexcept;
size_type find_last_not_of(konštcharT*s,size_type poz,size_type n) konšt;
size_type find_last_not_of(konštcharT*s,size_type poz=npos) konšt;
size_type find_last_not_of(charta c,size_type poz=npos) konšt;

Záver

C ++ má reťazcové literály a reťazcové objekty. Reťazcový objekt má sériu znakov v poradí za sebou, podobne ako pole znakov v sekvencii. Rozdiel medzi kolekciou reťazcov a poľom je v tom, že zbierka reťazcov môže rásť alebo sa zmenšovať. Objekt reťazca je vytvorený (vytvorený) z triedy reťazcov. Reťazcový objekt je dátová štruktúra s členskými funkciami. Členské funkcie je možné klasifikovať podľa nadpisov konštrukcia objektu, prístup k prvkom, kapacita reťazca, členské funkcie reťazca s argumentmi iterátora a návratovými typmi a modifikátory reťazcov. Existujú tiež reťazcové rovnosti a relačné operátory.