C++-Referenz/ Standardbibliothek/ Zeichenketten/ basic string

Aus Wikibooks
Alte Seite

Die Arbeit am Buch »C++-Referenz« wurde vom Hauptautor eingestellt. Ein Lehrbuch zum Thema C++ ist unter »C++-Programmierung« zu finden. Eine sehr umfangreiche und gute Referenz gibt es unter cppreference.com.

Diese Seite beschreibt C++98, einen stark veralteten Standard. Aktuelle Referenz.

// Header: string
template<typename charT, typename traits = char_traits<charT>, typename Allocator = allocator<charT> >
class basic_string {
public:
    typedef          traits                       traits_type;
    typedef typename traits::char_type            value_type;
    typedef          Allocator                    allocator_type;
    typedef typename Allocator::size_type         size_type;
    typedef typename Allocator::difference_type   difference_type;
    typedef typename Allocator::reference         reference;
    typedef typename Allocator::const_reference   const_reference;
    typedef typename Allocator::pointer           pointer;
    typedef typename Allocator::const_pointer     const_pointer;
    typedef implementation defined                iterator;
    typedef implementation defined                const_iterator;
    typedef std::reverse_iterator<iterator>       reverse_iterator;
    typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
    static size_type const npos = -1;

// Konstruktoren, Destruktor, Kopieren
    explicit basic_string(Allocator const& a = Allocator());

    basic_string(
        basic_string const& str,
        size_type pos = 0,
        size_type n = npos,
        Allocator const& a = Allocator()
    );

    basic_string(charT const* s, size_type n, Allocator const& a = Allocator());

    basic_string(charT const* s, Allocator const& a = Allocator());

    basic_string(size_type n, charT c, Allocator const& a = Allocator());

    template<typename InputIterator>
    basic_string(InputIterator begin, InputIterator end, Allocator const& a = Allocator());

    ~basic_string();

    basic_string& operator=(basic_string const& str);
    basic_string& operator=(charT const* s);
    basic_string& operator=(charT c);

// Iteratoren
    iterator       begin();
    const_iterator begin()const;
    iterator       end();
    const_iterator end()const;

    reverse_iterator       rbegin();
    const_reverse_iterator rbegin()const;
    reverse_iterator       rend();
    const_reverse_iterator rend()const;

// Kapazität
    size_type size()const;
    size_type length()const;
    size_type max_size()const;
    size_type capacity()const;
    bool      empty()const;

    void resize(size_type n, charT c);
    void resize(size_type n);

    void reserve(size_type res_arg = 0);

    void clear();

// Elementzugriff
    const_reference operator[](size_type pos)const;
    reference       operator[](size_type pos);
    const_reference at(size_type n)const;
    reference       at(size_type n);

// Modifizierer
    basic_string& operator+=(basic_string const& str);
    basic_string& operator+=(charT const* s);
    basic_string& operator+=(charT c);

    basic_string& append(basic_string const& str);
    basic_string& append(basic_string const& str, size_type pos, size_type n);
    basic_string& append(charT const* s, size_type n);
    basic_string& append(charT const* s);
    basic_string& append(size_type n, charT c);
    template<typename InputIterator>
    basic_string& append(InputIterator first, InputIterator last);

    basic_string& assign(basic_string const&);
    basic_string& assign(basic_string const& str, size_type pos, size_type n);
    basic_string& assign(charT const* s, size_type n);
    basic_string& assign(charT const* s);
    basic_string& assign(size_type n, charT c);
    template<typename InputIterator>
    basic_string& assign(InputIterator first, InputIterator last);

    basic_string& insert(size_type pos1, basic_string const& str);
    basic_string& insert(size_type pos1, basic_string const& str, size_type pos2, size_type n);
    basic_string& insert(size_type pos, charT const* s, size_type n);
    basic_string& insert(size_type pos, charT const* s);
    basic_string& insert(size_type pos, size_type n, charT c);
    iterator      insert(iterator p, charT c = charT());
    void          insert(iterator p, size_type n, charT c);
    template<typename InputIterator>
    void          insert(iterator p, InputIterator first, InputIterator last);

    basic_string& erase(size_type pos = 0, size_type n = npos);
    iterator      erase(iterator position);
    iterator      erase(iterator first, iterator last);

    basic_string& replace(size_type pos1, size_type n1, basic_string const& str);
    basic_string& replace(
        size_type pos1,
        size_type n1,
        basic_string const& str,
        size_type pos2,
        size_type n2
    );
    basic_string& replace(size_type pos, size_type n1, charT const* s, size_type n2);
    basic_string& replace(size_type pos, size_type n1, charT const* s);
    basic_string& replace(size_type pos, size_type n1, size_type n2, charT c);
    basic_string& replace(iterator i1, iterator i2, basic_string const& str);
    basic_string& replace(iterator i1, iterator i2, charT const* s, size_type n);
    basic_string& replace(iterator i1, iterator i2, charT const* s);
    basic_string& replace(iterator i1, iterator i2, size_type n, charT c);
    template<typename InputIterator>
    basic_string& replace(iterator i1, iterator i2, InputIterator j1, InputIterator j2);

    size_type copy(charT* s, size_type n, size_type pos = 0) const;

    void swap(basic_string<charT,traits,Allocator>&);

// Stringoperationen:
    const charT* c_str()const;
    const charT* data()const;

    allocator_type get_allocator()const;

    size_type find(basic_string const& str, size_type pos = 0)const;
    size_type find(charT const* s, size_type pos, size_type n)const;
    size_type find(charT const* s, size_type pos = 0)const;
    size_type find(charT c, size_type pos = 0)const;

    size_type rfind(basic_string const& str, size_type pos = npos)const;
    size_type rfind(charT const* s, size_type pos, size_type n)const;
    size_type rfind(charT const* s, size_type pos = npos)const;
    size_type rfind(charT c, size_type pos = npos)const;

    size_type find_first_of(basic_string const& str, size_type pos = 0)const;
    size_type find_first_of(charT const* s, size_type pos, size_type n)const;
    size_type find_first_of(charT const* s, size_type pos = 0)const;
    size_type find_first_of(charT c, size_type pos = 0)const;

    size_type find_last_of(basic_string const& str, size_type pos = npos)const;
    size_type find_last_of(charT const* s, size_type pos, size_type n)const;
    size_type find_last_of(charT const* s, size_type pos = npos)const;
    size_type find_last_of(charT c, size_type pos = npos)const;

    size_type find_first_not_of(basic_string const& str, size_type pos = 0)const;
    size_type find_first_not_of(charT const* s, size_type pos, size_type n)const;
    size_type find_first_not_of(charT const* s, size_type pos = 0)const;
    size_type find_first_not_of(charT c, size_type pos = 0)const;

    size_type find_last_not_of(basic_string const& str, size_type pos = npos)const;
    size_type find_last_not_of(charT const* s, size_type pos, size_type n)const;
    size_type find_last_not_of(charT const* s, size_type pos = npos)const;
    size_type find_last_not_of(charT c, size_type pos = npos)const;

    basic_string substr(size_type pos = 0, size_type n = npos)const;

    int compare(basic_string const& str)const;
    int compare(size_type pos1, size_type n1, basic_string const& str)const;
    int compare(size_type pos1, size_type n1, basic_string const& str, size_type pos2, size_type n2)const;
    int compare(charT const* s)const;
    int compare(size_type pos1, size_type n1, charT const* s, size_type n2 = npos)const;
};

// trait-Klassendeklarationen
template<typename charT> struct char_traits;
template<> struct char_traits<char>;
template<> struct char_traits<wchar_t>;

// Verknüpfung
template<typename charT, typename traits, typename Allocator> basic_string<charT,traits,Allocator>
operator+(
    basic_string<charT,traits,Allocator> const& lhs,
    basic_string<charT,traits,Allocator> const& rhs
);

template<typename charT, typename traits, typename Allocator> basic_string<charT,traits,Allocator>
operator+(charT const* lhs, basic_string<charT,traits,Allocator> const& rhs);

template<typename charT, typename traits, typename Allocator> basic_string<charT,traits,Allocator>
operator+(charT lhs, basic_string<charT,traits,Allocator> const& rhs);

template<typename charT, typename traits, typename Allocator> basic_string<charT,traits,Allocator>
operator+(basic_string<charT,traits,Allocator> const& lhs, charT const* rhs);

template<typename charT, typename traits, typename Allocator> basic_string<charT,traits,Allocator>
operator+(basic_string<charT,traits,Allocator> const& lhs, charT rhs);

// Vergleiche
template<typename charT, typename traits, typename Allocator>
bool operator==(
    basic_string<charT,traits,Allocator> const& lhs,
    basic_string<charT,traits,Allocator> const& rhs
);

template<typename charT, typename traits, typename Allocator>
bool operator==(charT const* lhs, basic_string<charT,traits,Allocator> const& rhs);

template<typename charT, typename traits, typename Allocator>
bool operator==(basic_string<charT,traits,Allocator> const& lhs, charT const* rhs);

template<typename charT, typename traits, typename Allocator>
bool operator!=(
    basic_string<charT,traits,Allocator> const& lhs,
    basic_string<charT,traits,Allocator> const& rhs
);

template<typename charT, typename traits, typename Allocator>
bool operator!=(charT const* lhs, basic_string<charT,traits,Allocator> const& rhs);

template<typename charT, typename traits, typename Allocator>
bool operator!=(basic_string<charT,traits,Allocator> const&  lhs, charT const* rhs);

template<typename charT, typename traits, typename Allocator>
bool operator<(
    basic_string<charT,traits,Allocator> const& lhs,
    basic_string<charT,traits,Allocator> const& rhs);

template<typename charT, typename traits, typename Allocator>
bool operator<(basic_string<charT,traits,Allocator> const&  lhs, charT const* rhs);

template<typename charT, typename traits, typename Allocator>
bool operator<(charT const* lhs, basic_string<charT,traits,Allocator> const& rhs);

template<typename charT, typename traits, typename Allocator>
bool operator>(
    basic_string<charT,traits,Allocator> const& lhs,
    basic_string<charT,traits,Allocator> const& rhs
);

template<typename charT, typename traits, typename Allocator>
bool operator>(basic_string<charT,traits,Allocator> const& lhs, charT const* rhs);

template<typename charT, typename traits, typename Allocator>
bool operator>(charT const* lhs, basic_string<charT,traits,Allocator> const& rhs);

template<typename charT, typename traits, typename Allocator>
bool operator<=(
    basic_string<charT,traits,Allocator> const& lhs,
    basic_string<charT,traits,Allocator> const& rhs
);

template<typename charT, typename traits, typename Allocator>
bool operator<=(basic_string<charT,traits,Allocator> const&  lhs, charT const* rhs);

template<typename charT, typename traits, typename Allocator>
bool operator<=(charT const* lhs, basic_string<charT,traits,Allocator> const& rhs);

template<typename charT, typename traits, typename Allocator>
bool operator>=(
    basic_string<charT,traits,Allocator> const& lhs,
    basic_string<charT,traits,Allocator> const& rhs
);

template<typename charT, typename traits, typename Allocator>
bool operator>=(basic_string<charT,traits,Allocator> const& lhs, charT const* rhs);

template<typename charT, typename traits, typename Allocator>
bool operator>=(charT const* lhs, basic_string<charT,traits,Allocator> const& rhs);

// Spezialisierte Algorithmen
template<typename charT, typename traits, typename Allocator>
void swap(basic_string<charT,traits,Allocator>& lhs, basic_string<charT,traits,Allocator>& rhs);

// Stream-Operationen
template<typename charT, typename traits, typename Allocator>
basic_istream<charT,traits>& operator>>(
    basic_istream<charT,traits>& is,
    basic_string<charT,traits,Allocator>& str
);

template<typename charT, typename traits, typename Allocator>
basic_ostream<charT, traits>& operator<<(
    basic_ostream<charT, traits>& os,
    basic_string<charT,traits,Allocator> const& str
);

template<typename charT, typename traits, typename Allocator>
basic_istream<charT,traits>& getline(
    basic_istream<charT,traits>& is,
    basic_string<charT,traits,Allocator>& str,
    charT delim
);

template<typename charT, typename traits, typename Allocator>
basic_istream<charT,traits>& getline(
    basic_istream<charT,traits>& is,
    basic_string<charT,traits,Allocator>& str
);

// Typdefinitionen
typedef basic_string<char> string;
typedef basic_string<wchar_t> wstring;