Ce face std::string::replace
s.replace(poz, n, nou) șterge n caractere de la poz și pune în locul lor nou, care poate avea altă lungime. Atenție: nu caută un text după conținut, ca în alte limbaje, ci lucrează cu poziții.
Pentru „înlocuiește toate aparițiile lui X cu Y” combini find și replace într-o buclă (exemplul 2) sau folosești std::regex_replace.
Parametri
| Parametru | Descriere |
|---|---|
poz |
Poziția de început a porțiunii înlocuite. |
n |
Lungimea porțiunii înlocuite. |
text_nou |
Textul care intră în loc. |
Ce returnează
Referință la șirul modificat.
Exemple
Exemplul 1: Înlocuirea primei apariții
#include <iostream>
#include <string>
int main() {
std::string s = "Ana are mere.";
std::string cauta = "mere";
std::size_t poz = s.find(cauta);
if (poz != std::string::npos) {
s.replace(poz, cauta.size(), "pere și prune");
}
std::cout << s << '\n';
}
Rezultat
Ana are pere și prune.
Exemplul 2: Înlocuirea tuturor aparițiilor
După fiecare înlocuire continuăm căutarea după textul nou, ca să nu-l înlocuim din nou.
#include <iostream>
#include <string>
std::string inlocuieste_tot(std::string s, const std::string& vechi, const std::string& nou) {
std::size_t poz = 0;
while ((poz = s.find(vechi, poz)) != std::string::npos) {
s.replace(poz, vechi.size(), nou);
poz += nou.size();
}
return s;
}
int main() {
std::cout << inlocuieste_tot("1.299.000 lei", ".", " ") << '\n';
std::cout << inlocuieste_tot("ab ab ab", "ab", "abc") << '\n';
}
Rezultat
1 299 000 lei
abc abc abc
Greșeli frecvente
- Scrii
s.replace("vechi", "nou")ca în Python sau JavaScript: nu există așa ceva.replaceprimește poziție și lungime. - În bucla de înlocuire nu avansezi poziția după textul nou: dacă textul nou îl conține pe cel vechi, bucla nu se termină.
Comenzi înrudite
std::string::find: Caută un text și returnează poziția primei (find) sau ultimei (rfind) apariții, ori npos.std::string::erase: Șterge o porțiune din șir, dată prin poziția de început și numărul de caractere.std::string::insert: Inserează text la o anumită poziție în șir, mutând restul spre dreapta.std::regex_replace: Înlocuiește toate potrivirile unei expresii regulate cu alt text, care poate folosi grupurile $1, $2.