Namespaces
Variants

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

Von de.cppreference.net
 
 
 
std::basic_string
 
basic_string substr( size_type pos = 0, size_type count = npos ) const;
(1) (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). Falls der angeforderte Teilstring über das Ende der Zeichenkette hinausreicht, d.h. die count größer als size() - pos ist (z.B. wenn count == npos), ist der zurückgegebene Teilstring [pos, size()).

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

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

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