Linux E X P R E S

Facebook

Programovanie v jazyku C++: knižnica string – funkcie substr a pop_back

C++

V záverečnom dieli z minicyklu o knižnice string si povieme o funkciách substr a pop_back.


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 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! 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
}

Výstup programu Výstup 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

Diskuze (9) Nahoru