Namensräume
Varianten
Aktionen

std::basic_string<CharT,Traits,Allocator>:substr

Von cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
(1)
basic_string substr( size_type pos = 0, size_type count = npos ) const;
(bis C++23)
(constexpr seit C++20)
constexpr basic_string
    substr( size_type pos = 0, size_type count = npos ) const&;
(seit C++23)
constexpr basic_string substr( size_type pos = 0, size_type count = npos ) &&;
(2) (seit C++23)

Gibt einen Teilstring [pospos + count) zurück. Wenn der angeforderte Teilstring über das Ende des Strings hinausgeht, d.h. wenn count größer als size() - pos ist (z. B. wenn count == npos), ist der zurückgegebene Teilstring [possize()).

1) Äquivalent zu return basic_string(*this, pos, count);.
2) Äquivalent zu return basic_string(std::move(*this), pos, count);.

Inhalt

[bearbeiten] Parameter

pos - Position des ersten einzuschließenden Zeichens
zählt - Länge des Teilstrings

[bearbeiten] Rückgabewert

String, der den Teilstring [pospos + count) oder [possize()) enthält.

[bearbeiten] Ausnahmen

std::out_of_range, wenn pos > size().

Wenn aus irgendeinem Grund eine Ausnahme ausgelöst wird, haben diese Funktionen keine Auswirkungen (starke Ausnahme-Sicherheitsgarantie).

[bearbeiten] Komplexität

Linear in count.

[bearbeiten] Hinweise

Der Allocator des zurückgegebenen Strings wird standardmäßig konstruiert: Der neue Allocator ist möglicherweise *nicht* eine Kopie von get_allocator().

[bearbeiten] Beispiel

#include <iostream>
#include <string>
 
int main()
{
    std::string a = "0123456789abcdefghij";
 
    // count is npos, returns [pos, size())
    std::string sub1 = a.substr(10);
    std::cout << sub1 << '\n';
 
    // both pos and pos + count are within bounds, returns [pos, pos + count)
    std::string sub2 = a.substr(5, 3);
    std::cout << sub2 << '\n';
 
    // pos is within bounds, pos + count is not, returns [pos, size())
    std::string sub4 = a.substr(a.size() - 3, 50);
    // this is effectively equivalent to
    // std::string sub4 = a.substr(17, 3);
    // since a.size() == 20, pos == a.size() - 3 == 17, and a.size() - pos == 3
 
    std::cout << sub4 << '\n';
 
    try
    {
        // pos is out of bounds, throws
        std::string sub5 = a.substr(a.size() + 3, 50);
        std::cout << sub5 << '\n';
    }
    catch (const std::out_of_range& ex)
    {
        std::cout << ex.what() << '\n';
    }
}

Mögliche Ausgabe

abcdefghij
567
hij
basic_string::substr: __pos (which is 23) > this->size() (which is 20)

[bearbeiten] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 847 C++98 Es gab keine Ausnahmesicherheitsgarantie starke Ausnahmesicherheitsgarantie hinzugefügt

[bearbeiten] Siehe auch

kopiert Zeichen
(public member function) [bearbeiten]
gibt die Anzahl der Zeichen zurück
(public member function) [edit]
sucht das erste Vorkommen der gegebenen Teilzeichenkette
(public member function) [edit]
constexpr size_type npos [static] der spezielle Wert size_type(-1), seine genaue Bedeutung hängt vom Kontext ab[bearbeiten]
gibt eine Teilzeichenkette zurück
(public member function of std::basic_string_view<CharT,Traits>) [bearbeiten]