Funkcia replace
Máte reťazec, ale časť z neho potrebujete pohodlne nahradiť inými znakmi? Nato je určená funkcia replace
. Samozrejme nie je nutnosťou ju využiť, keďže v minulých dielach sme si ukázali viacero spôsobov nahradzovania reťazcov, no priame využitie funkcie replace
ušetrí čas. Na úvod si ukážeme prvý príklad, kde sa zoznámime s funkciou replace
aj s jej argumentmi.
1. príklad: Zoznámenie sa s funkciou replace
#include <iostream> //kniznice #include <string> using namespace std; //priestor mien int main() //hlavna funkcia main { string retazec = "Jupiter je krasny!"; //prvy sposob retazec.replace(0,7,"Mars"); cout << retazec << "\n"; string retazec1 = "Kto bol prvym kozmonautom na Mesiaci?"; //druhy sposob string retazec2 = "astronautom"; retazec1.replace(14,11,retazec2); cout << retazec1 << "\n"; string retazec3 = "Videl si ruzovy Mesiac?"; //treti sposob retazec3.replace(9,6,"modry",0,5); cout << retazec3 << "\n"; string retazec4 = "Trava je modra!"; //stvrty sposob string retazec5 = "affzelenaefaf"; retazec4.replace(retazec4.size()-6,5,retazec5,3,6); cout << retazec4 << "\n"; string retazec6 = "Pocul si ma."; //piaty sposob retazec6.replace(retazec6.size()-1,1,3,'?'); cout << retazec6 << "\n"; return 0; //koniec programu }
Testujeme funkciu replace
Rozbor programu:
Rozdelili sme si kód na viacero spôsobov a pre jednotlivé spôsoby si ukážeme syntax a stručné vysvetlenie k tomu.
1. a 2. spôsob:
Začnime prvým a druhým spôsobom. Syntax majú rovnakú, líšia sa len tým, ako deklarujeme reťazec. Syntax vyzerá nasledovne:
retazec.replace(
pozícia, počet znakov, reťazec1);
Argumentom pozícia rozumieme počiatočnú pozíciu v reťazci, odkiaľ chceme nahradzovať. Počet znakov nám určí počet znakov v reťazci, ktoré chceme nahradiť od určenej pozície. Argument retazec1 môže byť v tváre definovaného reťazca alebo v tvare mena objektu typu string
.
3. a 4. spôsob:
Začiatočné tri argumenty majú rovnakú funkcionalitu ako v prvom a druhom spôsobe. Ale čo štvrtý a piaty argument? Ukážme si syntax:
retazec.replace(
pozícia pre retazec, počet znakov pre retazec, retazec1, pozícia pre retazec1, počet znakov pre retazec1);
Takže zo syntaxe môžete vidieť, že štvrtý a piaty argument je rovnaký, len sa vzťahuje na druhý reťazec.
5. spôsob:
Syntax 5. spôsobu je nasledovná:
retazec.replace(
pozícia, počet znakov, počet kópii znaku, znak);
Vo štvrtom argumente si vyberieme znak a v treťom určíme, koľko krát sa ma daný znak skopírovať. Napríklad ak určíme znak 'x'
a v treťom argumente dáme číslo 5
, tak získame xxxxx.
V druhom príklade si ukážeme praktickú ukážku využitia funkcie replace
.
2. príklad: Praktická ukážka využitia funkcie replace
#include <iostream> //kniznice #include <string> using namespace std; //priestor mien int main() //hlavna funkcia main { string retazec = "Sviatok Valentyn oslavujeme 14. februara!"; cout << retazec << "\n"; for(size_t i = 0; i < retazec.size(); i++) { if(retazec[i]=='Y' || retazec[i]=='y') { cout << "Tak podla teba je Valentin s tvrdym y hej?" << "\n"; retazec.replace(i,1,1,'i'); } } cout << retazec << "\n"; return 0; //koniec programu }
Praktický príklad na funkciu replace
Rozbor programu:
Pointa programu je taká, že zoberie reťazec a skontroluje, či sa tam nenachádza znak y
alebo Y
a ak existuje, tak nahradíme y
alebo Y
znakom i
.
Jadro nášho programu, kde nastáva to nahradenie znaku s pomocou funkcie replace
je nasledovné:
for(size_t i = 0; i < retazec.size(); i++) { if(retazec[i]=='Y' || retazec[i]=='y') { cout << "Tak podla teba je Valentin s tvrdym y hej?" << "\n"; retazec.replace(i,1,1,'i'); } }