Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Hasło nie zostało zweryfikowane
Niniejsze hasło zostało opracowane, jednak nie zostało ono zweryfikowane przez administrację serwisu. Jeżeli znalazłeś błędy merytoryczne w niniejszym dokumencie, prosimy o ich zgłoszenie na forum w dziale Znalezione błędy.
Opracował: Mrovqa
Język C++

basic_string::replace

[metoda] Zamienia część znaków na inne.

Składnia

C/C++
#include <string>

namespace std
{
    template <
    class TypZnaku,
    class CechowanieZnakow = char_traits < TypZnaku >,
    class Alokator = allocator < TypZnaku >
    >
    class basic_string
    {
    private:
        typedef basic_string < TypZnaku, CechowanieZnakow, Alokator > UtworzonaKlasaT;
    public:
        UtworzonaKlasaT & replace( size_type _pos, size_type _len, const UtworzonaKlasaT & _str ); // (1a)
        UtworzonaKlasaT & replace( const_iterator _i1, const_iterator _i2, const UtworzonaKlasaT & _str ); // (1b)
       
        UtworzonaKlasaT & replace( size_type _pos, size_type _len, const UtworzonaKlasaT & _str, size_type _subpos, size_type _sublen ); // (2)
       
        UtworzonaKlasaT & replace( size_type _pos, size_type _len, const TypZnaku * _s ); //(3a)
        UtworzonaKlasaT & replace( const_iterator _i1, const_iterator _i2, const TypZnaku * _s ); //(3b)
       
        UtworzonaKlasaT & replace( size_type _pos, size_type _len, const TypZnaku * _s, size_type _n ); //(4a)
        UtworzonaKlasaT & replace( const_iterator _i1, const_iterator _i2, const TypZnaku * _s, size_type _n ); //(4b)
       
        UtworzonaKlasaT & replace( size_type _pos, size_type _len, size_type _n, TypZnaku _c ); //(5a)
        UtworzonaKlasaT & replace( const_iterator _i1, const_iterator _i2, size_type _n, TypZnaku _c ); //(5b)
       
        template < class WejsciowyIterator >
        UtworzonaKlasaT & replace( const_iterator _i1, const_iterator _i2, WejsciowyIterator _pierwszy, WejsciowyIterator _ostatni ); //(6)
       
        UtworzonaKlasaT & replace( const_iterator _i1, const_iterator _i2, initializer_list < TypZnaku > _il ); //(7)
       
    }; //class basic_string
} //namespace std

Argumenty

ArgumentOpis
_strInny obiekt tego samego typu (z uwzględnieniem parametrów szablonu!).
_posPozycja pierwszego znaku, który ma zostać zamieniony.
_lenIlość znaków do zamiany. Wartość » standard C++ » basic_stringnpos spowoduje zamianę wszystkich pozostałych znaków.
_subposPozycja pierwszego znaku podciągu w _str, który zostanie skopiowany.
_sublenMaksymalna długość podciągu, który ma zostać skopiowany. Wartość » standard C++ » basic_stringnpos spowoduje wykorzystanie wszystkich pozostałych znaków.
_sWskaźnik na tablicę znaków.
_nLiczba znaków do wstawienia.
_cZnak do wstawienia _n razy.
_i1, _i2Przedział [_i1, _i2) określa część aktualnego obiektu, która ma zostać zamieniona nową treścią.
_pierwszy, _ostatniPrzedział [_pierwszy, _ostatni) określający łańcuch znaków do wstawienia.
_ilObiekt » standard C++11initializer_list. To co zostanie z niego skonstruowane będzie wstawione do aktualnego stringa.

Zwracana wartość

Metody zwracają referencję do obiektu, na którym zostały wywołane (
* this
).

Opis szczegółowy

Wszystkie metody znaki do zamiany określają przedziałem [_i1, _i2) lub wskazują, by zamienić _len znaków od pozycji _pos. Metody (1) wstawiają cały string, podczas gdy metoda (2) wstawia _sublen znaków od pozycji _subpos. Metody (3) wstawiają całą tablicę znaków daną wskaźnikiem _s. Metody (4) działają podobnie do poprzedniczek, z tą różnicą, iż wstawiają tylko _n znaków z danej tablicy. Metody (5) wstawiają _n znaków o wartości _c. Metoda (6) wstawia cały przedział [_pierwszy, _ostatni), natomiast wersja (7) wstawia obiekt powstały na bazie listy inicjalizacyjnej.

Rzucane wyjątki

Jeżeli wyjątek zostanie rzucony, wartość obiektu nie ulegnie zmianie.

Jeżeli _s nie wskazuje na wystarczająco dużą tablicę (_n jest za duże) lub przedział [_pierwszy, _ostatni) jest niepoprawny, to zachowanie jest niezdefiniowane.

Jeżeli _pos jest większe od długości aktualnego obiektu albo _subpos jest większe od długości _str, to zostanie wtedy rzucony » standard C++out_of_range.
Jeżeli wynik » standard C++ » basic_stringlength przekroczy » standard C++ » basic_stringmax_size, to zostanie rzucony » standard C++length_error.
Jeżeli szablon korzysta z domyślnego alokatora, to » standard C++bad_alloc zostanie rzucony, gdy funkcja będzie chcieć zaalokować pamięć i operacja się nie powiedzie.

Przykład

C/C++
#include <iostream>
#include <string>

typedef std::basic_string < char, std::char_traits < char >, std::allocator < char >> MojString;
int main()
{
    MojString baza = "to jest testowy string.";
    MojString str2 = "przykladowy";
    MojString str3 = "duzy lancuch";
    MojString str4 = "przydatna.";
   
    // Uzywanie pozycji:                      0123456789*123456789*12345
    MojString str = baza; //              // "to jest testowy string."
    str.replace( 8, 7, str2 ); //         // "to jest przykladowy string."
    str.replace( 20, 6, str3, 5, 7 ); //  // "to jest przykladowy lancuch."
    str.replace( 8, 11, "tylko" ); //     // "to jest tylko lancuch."
    str.replace( 8, 5, "krotki kij", 6 ); // "to jest krotki lancuch."
    str.replace( 22, 1, 3, '!' ); //      // "to jest krotki lancuch!!!"
   
    // Uzywanie iteratorow:                                                     0123456789*123456789*
    str.replace( str.begin(), str.end() - 3, str3 ); //                     // "duzy lancuch!!!"
    str.replace( str.begin(), str.begin() + 4, "zamiana" ); //              // "zamiana lancuch!!!"
    str.replace( str.begin() + 8, str.begin() + 15, "jest fajna ba!", 10 ); // "zamiana jest fajna!!!"
    str.replace( str.begin() + 14, str.end() - 6, 4, 'a' ); //              // "zamiana jest faaaajna!!!"
    str.replace( str.begin() + 13, str.end(), str4.begin(), str4.end() ); //// "zamiana jest przydatna."
    std::cout << str << '\n';
    return 0;
}
Standardowe wyjście programu:
zamiana jest przydatna.

Zagadnienia powiązane

insertWstawia znaki do aktualnego łańcucha znaków. (metoda)
appendModyfikuje przechowywany tekst poprzez dopisanie podanego łańcucha znaków na koniec tekstu. (metoda)
substrZwraca podciąg łańcucha znaków. (metoda)
eraseUsuwa część stringa. (metoda)
assignPrzypisuje nową wartość aktualnemu obiektowi. (metoda)

Linki zewnętrzne