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
