std::string::insert în C++

Inserează text la o anumită poziție în șir, mutând restul spre dreapta.

Sintaxă
std::string& insert(std::size_t poz, const std::string& text);
std::string& insert(std::size_t poz, std::size_t n, char c);

Ce face std::string::insert

s.insert(poz, text) pune text înaintea caracterului de la poziția poz. Cu poz = 0 inserezi la început, cu poz = s.size() la final.

Varianta insert(poz, n, c) inserează caracterul c de n ori. Dacă poz este mai mare decât size(), se aruncă excepția std::out_of_range.

Parametri

Parametru Descriere
poz Poziția (în octeți) înaintea căreia se inserează.
text Textul inserat.
n, c Inserează caracterul c de n ori.

Ce returnează

Referință la șirul modificat.

Exemple

Exemplul 1: Inserarea unui titlu și a unui separator

#include <iostream>
#include <string>

int main() {
    std::string nume = "Popescu Ana";
    nume.insert(0, "Dna ");
    std::cout << nume << '\n';

    std::string telefon = "0740123456";
    telefon.insert(4, " ");
    telefon.insert(8, " ");
    std::cout << telefon << '\n';
}

Rezultat

Dna Popescu Ana
0740 123 456

Exemplul 2: Completare cu zerouri la stânga

#include <iostream>
#include <string>

int main() {
    std::string nr = std::to_string(42);
    if (nr.size() < 6) {
        nr.insert(0, 6 - nr.size(), '0');
    }
    std::cout << "Factura " << nr << '\n';
}

Rezultat

Factura 000042

Greșeli frecvente

  • Calculezi poziția după numărul de litere într-un text cu diacritice: pozițiile sunt în octeți, așa că inserezi în mijlocul unei litere.
  • Inserezi repetat la început într-un șir lung: fiecare inserare mută tot restul textului, ceea ce devine lent.

Comenzi înrudite

  • std::string::append: Adaugă text la sfârșitul șirului, la fel ca +=, cu variante pentru bucăți și caractere repetate.
  • std::string::erase: Șterge o porțiune din șir, dată prin poziția de început și numărul de caractere.
  • std::string::replace: Înlocuiește porțiunea de n caractere de la poziția poz cu alt text.