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

Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky astrotech.cz. Mám 25 rokov. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.


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



Public Relations

Vysvětleme si internet

TELE3Možná jste až do této chvíle vůbec netušili, že existuje něco jako DNS servery. A to navzdory tomu, že se s těmito při používání internetu dnes a denně setkáváte a nemůže tomu být ani jinak. Protože nebýt těchto, nebyl by internet internetem.

Pokračování ...


Redakční blog

Pavel Fric

Pavel Fric, 21. August

Sayonara Player 1.5.1

Přehrávač, jak má být. Poslední dobou vývoj šlape


Pavel Fric

Pavel Fric, 26. January

MuseScore 3

První aktualizace třetí řady notačního editoru MuseScore


Redakce

Redakce, 21. December

Pište pro LinuxEXPRES

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


Všechny blogy »

SOLIDWORKS