Linux E X P R E S

Facebook

Programovanie v jazyku C++: Knižníca string – funkcie assign a copy

C++

V minulom diele sme hovorili o funkcii append, ktorá pridáva znaky na koniec plného reťazca. V tomto diele si posvietíme na funkciu assign, ktorá prezmenu zaplňuje znaky od nultej pozície a tým sa líši od funkcie append. V záverečnej častí článku sa pozrieme na funkciu copy, ktorá nám umožní z reťazca získavať sekvencie znakov, ktoré uložíme do klasických C reťazcov. 


Funkcia assign

Chcete narýchlo pozmeniť alebo úplne zmeniť reťazec a nechcete deklarovať nový? S funkciou assign môžete nahradzovať reťazce podľa ľubovôle. Narozdiel od funkcie append, ktorá pridáva ďalšie znaky od posledneho zaplneného miesta v reťazci, funkcia assign pridáva od začiatku reťazca. Čiže ho nahradzuje!

1. príklad: Testujeme funkciu assign

#include <iostream>  // hlavičkové súbory
#include <string>

using namespace std;   // priestor mien

int main()   // hlavna funkcia main
{
    string retazec;
    string retazec0 = "Ouha ze si sa uracil prist lenivec!";

    retazec.assign(retazec0);    // prvy sposob
    cout << retazec;

    string retazec1 = "Zajtra je den D, kedy zautocia mimozemstania!\n";

    retazec1.assign("Zajtra je den D, kedy zautocia mimozemstania!Ale kecam hi hi :)\n");   // druhy sposob
    cout << retazec1;

    string retazec2 = "Dnes nas skoro dostalo tornado ty jo!\n";
    string retazec3;

    retazec3.assign(retazec2, 22, 7);   // treti sposob

    string retazec4;

    retazec4.assign("Milujem hru Cities Skylines, odporucam a moc!", 27);   // stvrty sposob

    string retazec5;

    cout << "Nezabij" << retazec5.assign(5, 'a') << "j ma!\n";   // piaty sposob
    retazec0.assign("Svet este neskoncil a stale mame sancu ho vylepsit!\n");  // demonstracia, ze dojde k nahradeniu uz deklarovaneho a naplneneho retazca
    cout << retazec0;
    retazec4.assign(retazec4.begin()+12, retazec4.end());  // siesty sposob
    cout << retazec4;

    return 0;   // koniec programu
}

Výsledok programu:

Ouha ze si sa uracil prist lenivec!Zajtra je den D, kedy zautocia mimozemstania!
Ale kecam hi hi :)
Nezabijaaaaaj ma!
Svet este neskoncil a stale mame sancu ho vylepsit!
Cities Skylines

Rozbor programu:

Deklarácie funkcie assign sú podobné ako pri funkcii append a konštruktore string. Takže by malo byť jasné použitie argumentov v jednotlivých možností.

Funkcia copy

Funkcia copy nám umožňuje kopírovať sekvenciu znakov z reťazca do poľa. Samozrejme char poľa, čiže ide stále o reťazec známy v jazyku C. Nech sú už dôvody použitia akekoľvek, je fajn si túto funkciu predstaviť.

Deklarácia funkcie copy je nasledovná:

retazec.copy(pole, len, pos);

kde pole je to naše char pole, do ktorého skopírujeme sekvenciu znakov, len je počet kopírovaných znakov od nejakej počiatočnej pozície a pos je pozícia, od ktorej sa začnú kopírovať znaky. Funkcia copy vracia počet znakov skopírované do poľa. To znamená, že návratová hodnota funkcie copy je rovná argumentu len.

2. príklad: Testovanie funkcie copy

#include <iostream>  // hlavičkové súbory
#include <string>

using namespace std;   // priestor mien

int main()   // hlavna funkcia main
{
    string retazec = "Zdravim ta pozemstan, cestujem z dalekej galaxie a vzdy som tuzil uz od prveho pohladu v nasom teleskope, navstivit Zem!";
    char charPole[20];

    size_t i = retazec.copy(charPole, 9, 11);

    charPole[i] = '\0';
    cout << charPole << "\n";

    string retazec1 = "Na odvratenu stranu Mesiaca my pozemstania nemame vizualny narok, nasimi ocami su technologicke zazraky iduce do vesmiru.";
    char charPole1[200];

    retazec1.copy(charPole1, 121, 0);
    charPole1[121] = '\0';
    cout << charPole1;

    return 0;
}

Výsledok programu:

pozemstan
Na odvratenu stranu Mesiaca my pozemstania nemame vizualny narok, nasimi ocami
su technologicke zazraky iduce do vesmiru.

Diskuze (5) Nahoru