std::string::erase în C++

Șterge o porțiune din șir, dată prin poziția de început și numărul de caractere.

Sintaxă
std::string& erase(std::size_t poz = 0, std::size_t n = npos);

Ce face std::string::erase

s.erase(poz, n) șterge n caractere începând de la poz. Fără n, șterge tot de la poz până la final. Fără argumente, golește șirul.

Se combină des cu find: găsești unde începe ce vrei să ștergi, apoi apelezi erase. Din C++20, std::erase(s, 'x') șterge toate aparițiile unui caracter.

Parametri

Parametru Descriere
poz Poziția primului caracter șters.
n Câte caractere se șterg; implicit până la final.

Ce returnează

Referință la șirul modificat. Aruncă std::out_of_range dacă poz > size().

Exemple

Exemplul 1: Ștergerea unei porțiuni și a finalului

#include <iostream>
#include <string>

int main() {
    std::string s = "Ana are multe mere";
    s.erase(8, 6);              // „multe ”
    std::cout << s << '\n';

    std::string fisier = "raport_final.pdf";
    fisier.erase(fisier.find('.'));   // de la punct până la final
    std::cout << fisier << '\n';
}

Rezultat

Ana are mere
raport_final

Exemplul 2: Ștergerea tuturor spațiilor

#include <iostream>
#include <string>

int main() {
    std::string iban = "RO49 AAAA 1B31 0075 9384 0000";
    std::erase(iban, ' ');   // C++20
    std::cout << iban << " (" << iban.size() << " caractere)\n";
}

Rezultat

RO49AAAA1B31007593840000 (24 caractere)

Greșeli frecvente

  • Apelezi s.erase(s.find(x)) fără să verifici că find a găsit ceva: npos este mai mare decât size(), deci se aruncă std::out_of_range.
  • Ștergi elemente într-o buclă care merge înainte și sari peste caractere, pentru că după ștergere restul se mută spre stânga.

Comenzi înrudite

  • std::string::insert: Inserează text la o anumită poziție în șir, mutând restul spre dreapta.
  • std::string::replace: Înlocuiește porțiunea de n caractere de la poziția poz cu alt text.
  • std::string::find: Caută un text și returnează poziția primei (find) sau ultimei (rfind) apariții, ori npos.
  • std::string::push_back: push_back adaugă un caracter la final; pop_back șterge ultimul caracter.