Funkcia substr
Potrebujete rýchlo získať časť reťazca a ďalej s ním pracovať? Nato dobré poslúži funkcia substr
. Funkcia substr
skopíruje vybranú časť reťazca do podreťazca a na základe dvoch argumentov si zvolíme konkrétnu časť. Poďme sa pozrieť na prvý príklad.
1. príklad: Testujeme funkciu substr
#include <iostream> //kniznice #include <string> using namespace std; //priestor mien int main() { string retazec1 = "Nasa Mliecna draha ma priemet 100 000 sv. rokov!"; int pos = retazec1.find('1'); string retazec2 = retazec1.substr(pos,7); cout << retazec2<<"\n"; string retazec3 = "Rozum, kde si sa mi stratil?"; int pos1 = retazec3.find('R'); string retazec4 = retazec3.substr(pos1); cout << retazec4 << "\n"; return 0; // koniec programu }
Test funkčností substr
Rozbor programu:
Syntax funkcie substr
môžeme napísať takto: substr(pos,len);
alebo aj takto substr(pos);
Funkcia substr
má dve argumenty. Prvým argumentom pos definujeme pozíciu, od ktorej chceme kopírovať znaky do nového podreťazca. Druhý argument hovorí o tom, koľko znakov od nami definovanej pozícii sa má skopírovať do reťazca.
Zoberme z nášho kódu túto časť:
string retazec2 = retazec1.substr(pos,7);
kde definujeme pozíciu, od ktorej chceme kópiu a argument len je zapísaný číselne. Avšak keď nedefinujeme argument len, tak ako sme to urobili v druhej implementácii funkcie substr
:
string retazec4 = retazec3.substr(pos1);
tak koniec kópie je definovaný až v samotnom konci reťazca.
Funkcia pop_back
Chcete vymazať posledný znak v danom reťazci? Túto operáciu dokážete s funkciou pop_back
. Po zmazaní znaku samozrejme dôjde ku korekcii aktuálnej veľkostí objektu typu string
. Ešte upozornenie, funkcia nemá žiadne argumenty! V druhom príklade si funkciu pop_back
vyskúšame.
2. príklad: Testovanie funkcie pop_back
#include <iostream> //kniznice #include <string> using namespace std; //priestor mien int main() { string retazec1 = "Nasa Mliecna draha ma priemet 100 000 sv. rokov!"; retazec1.pop_back(); cout << retazec1<<"\n"; string retazec2 = "Rozum, kde si sa mi stratil?"; retazec2.pop_back(); cout << retazec2 << "\n"; return 0; // koniec programu }
Nezabudnite pri kompilácii pridať podporu pre verziu C++11!
Rozbor programu:
Ak chceme odstrániť posledný znak, v našom prípade interpunkčné znamienka, tak nad reťazcom retazec1 a retazec2 zavoláme funkciu pop_back
.
Ukážme si ešte jeden príklad na funkciu pop_back
. V cykle postupne odstránime všetky znaky z reťazca okrem prvého znaku a následne k tomuto jednému znaku pridáme iný reťazec.
3. príklad: Ešte raz si vyskúšame funkciu pop_back
#include <iostream> //kniznice #include <string> using namespace std; //priestor mien int main() { string retazec1 = "O 5-6 miliard rokov nas pohlti umierajuce Slnko!"; for(size_t i = retazec1.size()-1; i >= 0 && i < retazec1.size(); i--) { if(retazec1[i] != 'O') retazec1.pop_back(); } retazec1.append("tce moj jediny!"); cout << retazec1<<"\n"; return 0; // koniec programu }
Takže práve sme si prešli dosť podrobne knižnicu string
. Dúfam, že vám tento minicyklus niečo dal, pretože objektový string
sa dá v mnohých oblastiach jednoducho využiť. O jednoduchostí hovoríme preto, lebo nemusíme sa veľmi starať o veľkosť reťazca a nie je problém i z dynamickými zmenami reťazca počas behu programu, čo je oproti klasického C prístupu úplná pohoda. Nabudúce sa začneme zaoberať vecami, ktorým sa v C++ nie všade dá vyhnúť a častokrát spôsobujú vrásky aj skúseným programátorom. Totižto nie stále vieme využiť knižnicu string
alebo vector
(to isté čo string
, len objektom je jednorozmerné pole) a často je potrebné využiť aj mechanizmy, o ktorých si budeme hovoriť a programovať v budúcich dielach.
Autor využíva Linux Ubuntu 16.04 LTS