Namespaces
Variants

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

From cppreference.net
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 zurück [ pos , pos + count ) . Wenn der angeforderte Teilstring über das Ende des Strings hinausgeht, d.h. wenn count größer ist als size ( ) - pos (z.B. wenn count == npos ), dann ist der zurückgegebene Teilstring [ pos , size() ) .

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

Inhaltsverzeichnis

Parameter

pos - Position des ersten einzubeziehenden Zeichens
count - Länge der Teilzeichenkette

Rückgabewert

Zeichenkette, die die Teilzeichenkette [ pos , pos + count ) oder [ pos , size() ) enthält.

Ausnahmen

std::out_of_range wenn pos > size ( ) .

Wenn aus irgendeinem Grund eine Exception ausgelöst wird, haben diese Funktionen keine Wirkung ( strong exception safety guarantee ).

Komplexität

Linear in count .

Hinweise

Der Allokator der zurückgegebenen Zeichenkette wird standardmäßig konstruiert: Der neue Allokator könnte möglicherweise keine Kopie von get_allocator() sein.

Beispiel

#include <iostream>
#include <string>
int main()
{
    std::string a = "0123456789abcdefghij";
    // count ist npos, gibt [pos, size()) zurück
    std::string sub1 = a.substr(10);
    std::cout << sub1 << '\n';
    // pos und pos + count sind innerhalb der Grenzen, gibt [pos, pos + count) zurück
    std::string sub2 = a.substr(5, 3);
    std::cout << sub2 << '\n';
    // pos ist innerhalb der Grenzen, pos + count nicht, gibt [pos, size()) zurück
    std::string sub4 = a.substr(a.size() - 3, 50);
    // dies ist effektiv äquivalent zu
    // std::string sub4 = a.substr(17, 3);
    // da a.size() == 20, pos == a.size() - 3 == 17, und a.size() - pos == 3
    std::cout << sub4 << '\n';
    try
    {
        // pos ist außerhalb der Grenzen, wirft Exception
        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)

Fehlerberichte

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

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 847 C++98 es gab keine Ausnahmesicherheitsgarantie starke Ausnahmesicherheitsgarantie hinzugefügt

Siehe auch

kopiert Zeichen
(öffentliche Elementfunktion)
gibt die Anzahl der Zeichen zurück
(öffentliche Elementfunktion)
findet das erste Vorkommen der gegebenen Teilzeichenkette
(öffentliche Elementfunktion)
constexpr size_type npos [static] der spezielle Wert size_type ( - 1 ) , dessen genaue Bedeutung vom Kontext abhängt
gibt eine Teilzeichenkette zurück
(öffentliche Elementfunktion von std::basic_string_view<CharT,Traits> )