std::basic_string<CharT,Traits,Allocator>:substr
| (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 [pos, pos + 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 [pos, size()).
Inhalt |
[bearbeiten] Parameter
| pos | - | Position des ersten einzuschließenden Zeichens |
| zählt | - | Länge des Teilstrings |
[bearbeiten] Rückgabewert
String, der den Teilstring [pos, pos + count) oder [pos, size()) 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) | |
| gibt die Anzahl der Zeichen zurück (public member function) | |
| sucht das erste Vorkommen der gegebenen Teilzeichenkette (public member function) | |
constexpr size_type npos [static] |
der spezielle Wert size_type(-1), seine genaue Bedeutung hängt vom Kontext ab |
| gibt eine Teilzeichenkette zurück (public member function of std::basic_string_view<CharT,Traits>) |