přejít na obsah přejít na navigaci

Linux E X P R E S, Programovanie v jazyku C++: knižnica string – funkcie substr a pop_back

Alvao

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.


reklama

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!";
    size_t size = retazec1.size();
    for(size_t i = 0; i < 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

Nahoru

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz

Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky Exospace.cz. Mám 24 rokov. Čas trávim v IT škole. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.


  • Distribuce: ubuntu
  • Grafické prostředí: unity


Alvao

Redakční blog

Redakce

Redakce, 21. prosinec

Pište pro LinuxEXPRES

Baví vás Linux? Pište o něm, není to nic těžkého. LinuxEXPRES hledá nové autory.


Pavel Fric

Pavel Fric, 23. říjen

Nové motivy pro přehrávač Sayonara

Pomozte rozšířit možnost měnit vzhled programu za běhu


Pavel Fric

Pavel Fric, 28. únor

Lollypop


Všechny blogy »

Geotronics - Bezpilotně