Curs C++ | Sectiunea 28 – Strings (Last Words)
Terminam acest capitol cu trecerea rapida in revista a mai multor functii membre. La un moment dat, sunt sigur ca unele dintre ele ne vor face viata mai usoara. Nu va faceti griji, vom mai discuta in viitor despre string-uri 😉 .
Concatenarea unui substring
💡 Noua functie introdusa poarta numele de append. Numele este suficient de sugestiv, avand rolul de a concatena un string cu un alt string. Daca va amintiti din sectiunea trecuta, acelasi lucru poate fi realizat si prin operatorul “+=“. De aici poate veni si intrebarea, de ce avem nevoie de o functie speciala pentru aceeasi functionalitate?
Vom raspunde la intrebarea folosind 3 exemple diferite. In primul rand, putem concatena un string la un alt string:
Mai departe, putem chiar si concatena un substring:
In final, avem varianta sa conctaneam un singur char, chiar sa-l si repetam de cate ori ne dorim:
🔖 Functia ne ofera mai multe optiuni, am vrut sa discutam de cele mai comune. Pentru mai multe detalii puteti citi si documentatia ei.
💡 Cand dorim sa concatenam un singur caracter unui string, putem folosi functia append dar exista si o metoda mai eficienta, folosind functia membru push_back. Aceasta are un rol la fel de sugestiv, de a adauga la final un nou element, in cazul nostru un caracter.
Inserarea unui substring
💡 Bineinteles, si pentru aceasta functionalitate avem o functie membru numita insert. Sa analizam urmatorul exemplu pentru a intelege cum functioneaza.
Deducem din exemplu ca primul parametru reprezinta pozitia unde sa aiba loc insertia iar al doilea, ce se va insera. Putem chiar sa selectam doar o portiune dintr-un string ce dorim a fi inserata, adica un substring;
Astfel, am selectat ca s2 sa fie inserat si am specificat ca dorim doar o parte din el, un substring ce incepe de la pozitia 0 si contine 2 elemente.
Asignarea unui substring
💡 Functia membru assign este intr-o oarecare masura, asemanatoare cu insert. Diferenta consta in faptul ca nu salveaza continutul anterior, doar il inlocuieste cu unul nou.
Mai mult, am putea spune ca este identica cu operatorul de asignare “=“,si nu am putea sa contrazicem aceasta afirmatie. Deci ramane la alegerea voastra ce doriti sa folositi 🙂 .
Inlocuirea unui substring
💡 Membrul replace va fi cel folosit in acest caz. Poate inlocui o parte dintr-un string cu un alt string sau substring. Pentru a specifica ce parte dorim sa inlocuim, trebuie sa furnizam functiei doi parametri, primul descrie pozitia de start iar al doilea, cate elemente vor fi inlocuite.
De asemenea, avem si ca si in cazul celorlalte metode, mai multe functii supraincarcate in care putem mentiona cu ce string inlocuim si chiar si ce parte din acel string.
❗ Atentie, in cazul in care incercam sa inlocuim mai multe elemente decat dimensiunea maxima a sirului nostru initial, vom primi o eroare ce ne va mentiona ca am depasit limitele std::out_of_range.
Stergerea unui substring
💡 Putem bineinteles sa stergem o parte dintr-un string, facand sirul nostru mai mic. Metoda folosita este la fel de sugestiva si poarta numele de erase.
Suntem nevoiti sa furnizam doi parametri, locul unde va incepe stergerea (cu valoara default egala cu inceputul sirului ) si cate elemente (cu valoare default reprezentand dimensiunea sirului). Daca apelam pur si simplu metoda fara a furniza cei doi parametrii vom sterge in realitate, tot continutul.
Interschimbarea string-urilor
🥛 In cazul unei sortari spre exemplu, apare nevoia de a interschimba doua variabile. In varianta clasica, am avea nevoie de o variabila suplimentara. Aceasta metoda poarta si numele de metoda paharelor. Ca si in realitate, daca dorim sa schimbam continutul a 2 pahare avem nevoie de un al 3 -lea.
💡 Aceasta este o metoda este foarte ineficienta cand discutam despre string-uri. Ar fi mult mai rapid si simplu sa nu transferam continutul de la un string la altul ci doar sa inlocuim pointerii intre ei. Metoda folosita poarta numele de swap si face exact ce am spus, fiind mult mai rapida decat metoda clasica.
Terminam aici si aceasta sectiune si pentru moment, punem in stand-by si povestea despre string-uri.
Vom reveni la ele dupa ce ne vom familiariza cu ideea de obiecte si programarea orientata pe obiecte. Toate metodele folosite au link-uri catre documentatia aferenta iar pentru intrebari suplimentare, puteti folosi informatiile de aici 🙂 .
➡ Sectiunea anterioara:Curs C++ | Sectiunea 27 – Strings (Noi functionalitati)
➡ Sectiunea urmatoare:Curs C++ | Sectiunea 29 – Name spaces

