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

Linux E X P R E S, Programovanie v jazyku C++: Knižníca string – funkcie assign a copy

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.

Nahoru

Příspěvky

Programovanie v jazyku C++: Knižníca string – funkcie assign a copy
Tomas 30. 09. 2017, 18:25:02
Odpovědět  Odkaz 
Načo sme sa v predchádzajúcich kapitolách učili funkcie size() a length()?

char charPole1[200];
size_t length, position;

length = retazec1.size();
position = 0;

// a dobre by bolo tiez osetrit vstup
if ((length
Eduard Boldižár Programovanie v jazyku C++: Knižníca string – funkcie assign a copy
Eduard Boldižár 1. 10. 2017, 21:43:54
Odpovědět  Odkaz 
Dobrý postreh ;) Vďaka za reakciu, spôsobov ako nato je viacero a napíšem jednu z nich. Je na samotnom programátorovi, aký spôsob si vyberie, hlavne aby tomu rozumel.

#include //hlavičkové súbory
#include
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
Eduard Boldižár Programovanie v jazyku C++: Knižníca string – funkcie assign a copy
Eduard Boldižár 1. 10. 2017, 21:45:11
Odpovědět  Odkaz 
A zvyšok.
cout
Eduard Boldižár Programovanie v jazyku C++: Knižníca string – funkcie assign a copy
Eduard Boldižár 1. 10. 2017, 21:53:19
Odpovědět  Odkaz 
Hm zas štrajkuje pridávanie komentárov, takže sorry za prípadne preklepy, ale komentáre k článkom sa musia ručné napísať:
size_t position = 0;
retazec.copy(charPole1, retazec1.size(), position);
charPole1(retazec1.size()) = '\0';

Alebo

size_t position = 0;
size_t len = retazec1.size(),
retazec.copy(charPole1, len, position);
charPole1(len) = '\0';
Re: Programovanie v jazyku C++: Knižníca string – funkcie assign a copy
Tomas 4. 10. 2017, 18:37:59
Odpovědět  Odkaz 
To už vyzerá lepšie ;-) Ešte by to chcelo ošetriť a bude to kompletné.

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