Linux E X P R E S

Facebook

Programovanie v jazyku C++: Knižnica string – funkcia replace

C++

Nahradiť časť reťazca inou časťou reťazca? V knižnici string sa nachádza funkcia replace, ktorá nám umožní jednoducho nahradzovať reťazce.


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 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 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');
    }
}

Diskuze (2) Nahoru